描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
输入
多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+
-++--++
样例输出
4
#include <stdio.h>
#include <string.h>
int main()
{
char a[5005],b[5005];
int x,y;
while(scanf("%s%s",a,b)!=EOF)
{
x=strlen(a);
y=strlen(b);
if(x!=y)
{
printf("-1\n");
continue;
}
int i,j,sum=0;
int c=0,d=0;
for(i=0;i<x;i++)
{
if(a[i]=='+')
{
c++;
}
if(b[i]=='+')
{
d++;
}
}
if(c!=d)
{
printf("-1\n");
break;
}
for(i=0;i<x;i++)
{
if(a[i]!=b[i])
{
for(j=i+1;j<x;j++)
{
sum++;//sum每加一次,代表换了一个位置
if(a[j]==b[i])
{
a[j]=a[i];//形象的体现a[j]与a[i]互换了位置 因为是一个一个从前往后比较 所以只需将后面的这个值更改一下即可
break;
}
}
}
}
printf("%d\n",sum);
}
return 0;
}