贪心选择,逐个比较,遇到不同的就和后面符合的符号就交换位置,下标的差就是本次需要移动的次数,
#include "iostream"
using namespace std;
#include "algorithm"
int main()
{
string a,b;
cin>>a;
cin>>b;
int n1=a.length();
int n2=b.length();/*统计两个字符串的长度*/
int num1=0,num2=0,sum=0;
for(int i=0;i<n1;i++)/*num1,和num2分别为a,b中+号的数目*/
{
if(a[i]=='+')
num1++;
}
for(int i=0;i<n2;i++)
{
if(b[i]=='+')
num2++;
}
if(n1!=n2||num1!=num2)/*如果两个a,b长度不相等或者+号不等,没法变换,输出-1*/
{
cout<<-1<<endl;
return 0;
}
for(int i=0;i<n1;i++)
{
if(a[i]!=b[i])/*对应位置不相等*/
{
for(int j=i+1;j<n1;j++)/*从a[i+1]开始查找*/
{
if(a[j]==b[i])/*找到和b[i]相等的*/
{
sum+=(j-i);/*差即为这个符号变化的次数*/
a[j]=a[i];/*相当于a[i]和a[j]上的符号交换位置*/
break;/*跳出小循环,开始下一次的查找*/
}
}
}
}
cout<<sum<<endl;
}