标签:
思路:
这道题和杭电的蚂蚁那道题可一样,因为这里面的加号(或者减号)都是一模一样的,所以当我们移动的时候,相同的符号可以相互穿越!首先先找到对应的位置上的字符不同的位置然后再将数组a向后面找与数组b中该位置上的字符相同的字符(在找的过程中要将找的步数加到min上)也就是需要交换的次数,然后只要找到有相同的就停止,交换就此结束,然后再继续往后遍历,直到遍历的所有对应位置上的字符都相等为止!
代码:
#include <stdio.h> #include <string.h> char a[5005],b[5005]; int main() { while(scanf("%s%s",a,b)!=EOF) { int len1=strlen(a); int len2=strlen(b); int cnt1=0,cnt2=0; for(int i=0;i<len1;i++) { if(a[i]=='+') cnt1++; } for(int j=0;j<len2;j++) { if(b[j]=='+') { cnt2++; } } if(len1!=len2||cnt1!=cnt2) { printf("-1\n"); continue; } int min=0; for(int i=0;i<len1;i++) { if(a[i]!=b[i])//找不相等的字符 { for(int j=i+1;j<len2;j++) { min++;//保存交换的次数 if(b[i]==a[j])//找与b数组该位置上的数相等的值 { a[i]=a[j]; break;//停止交换 } } } } printf("%d\n",min); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/dxx_111/article/details/48146111