+-字符串
时间限制:1000 ms | 内存限制:65535 KB
难度:1
描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
输入
多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+
-++--++
样例输出
4
个人理解:首先统计两字符串‘+’个数是否相等,不相等则进行下一组字符串比较,相等则统计操作次数
截图:
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,len,lena,lenb,c;
char a[5001],b[5001];
while(scanf("%s%s",a,b)!=EOF)
{
lena=lenb=c=0;
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]=='+')
lena++;
if(b[i]=='+')
lenb++;
}
if(lena!=lenb)
continue;//+号数不相等,一定不能将两个字符串转换成一样的
for(i=0;i<len;i++)
{
if(a[i]!=b[i]) //不等则需交换
{
for(j=i+1;j<len;j++)
{
c++; //j-i即为交换次数,即c++为交换次数
if(a[j]!=a[i])
{
a[j]=a[i]; //改变a[j]即可,因为交换,前面的一定会
//换成与b[i]一样的(此处没有改变),
//不影响交换次数,而后面的需要继续与
//字符串b比较,所以需要换成交换的符号
break;
}
}
}
}
printf("%d\n",c);
}
return 0;
}