问题 F: +-字符串
时间限制: 1 Sec 内存限制: 64 MB[ 提交][ 状态][ 讨论版]
题目描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
输入
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+
-++--++
样例输出
4
首先先找到对应的位置上的字符不同的位置然后再将数组a向后面找与数组b中该位置上的字符相同的字符 (在找的过程中要将找的步数加到min上)也就是需要交换的次数, 然后只要找到有相同的就停止,交换就此结束,然后再继续往后遍历, 直到遍历的所有对应位置上的字符都相等为止!# include<stdio.h> # include<string.h> char a[5005],b[5005]; int main(){ while(~scanf("%s%s",a,b)) { int i,j,c1=strlen(a),c2=strlen(b),a1=0,b1=0; for(i=0;i<c1;i++) if(a[i]=='+') a1++; for(i=0;i<c2;i++) if(b[i]=='+') b1++; int min=0; if(c1==c2&&a1==b1) //观察两个字符串的长度是否相同且‘+ ’个数是否相同; { for(i=0;i<c1;i++) { if(a[i]!=b[i])//找不相等的字符 { for(j=i+1;j<c1;j++) { min++; //保存交换的次数 if(b[i]==a[j])//找与b数组该位置上的数相等的值 { a[j]=a[i]; break;//停止交换 } } } } printf("%d\n",min); } else printf("-1\n"); } return 0; }