题目描述:
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题
- 输入
- 多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。 - 输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
- 样例输入
-
++-+--+ -++--++
- 样例输出
-
4
#include<stdio.h>
#include<string.h>
int main()
{
char a[5000],b[5000],ch;
while(gets(a)!=' '&&gets(b)!=' ')
{
int c,d,i,j,n=0,m=0,x=0;
c=strlen(a);
d=strlen(b);
if(c!=d)//判断二者长度是否相等 不相等输出-1 相等的话再看'+'(或者'-')的个数是否相等
{
printf("-1 ");
continue;
}
for(i=0;i<c;i++)
if(a[i]=='+')m++;
for(i=0;i<d;i++)
if(b[i]=='+')x++;
if(x!=m)//'+'(或者'-')的个数不相等,输出-1 相等的话开始计算经过几次能够完成变换
{
printf("-1 ");
continue;
}
for(i=0;i<c;i++)
{
if(a[i]==b[i])//依次判断各个对应位置上字符是否一致
continue;
for(j=i;j<c-1;j++)
{
n++;
if(a[i]==a[j+1])continue;
else
{
ch=a[i];
a[i]=a[j+1];
a[j+1]=ch;
break;
}
}
}
printf("%d ",n);
}
return 0;
}//AC