您的位置:首页 > 其它

NYOJ 915 +-字符串

2014-05-01 22:45 218 查看

+-字符串

时间限制:1000 ms  |  内存限制:65535 KB难度:1描述Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。输入多组测试数据每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。输出仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。样例输入
++-+--+
-++--++
样例输出
4
NYOJ 915 +-字符串链接
解析:这道题自己是没找出什么规律    这是我的弱项!!
解题思路:
1:判断+与-个数是否相同   不相同直接输出一
2:不会用嘴说可以看代码  很容易懂
#include<stdio.h>#include<string.h>char a[5005], b[5005];int main(){int i, len, flag1, flag2, count, j;while(scanf("%s%s", a, b) != EOF){flag1 = flag2 = 0;len = strlen(a);for(i = 0; i < len; i++){if(a[i] == '+')flag1++;if(b[i] == '+')flag2++;}if(flag1 != flag2){printf("-1\n");continue;}count = 0;for(i = 0; i < len; i++){if(a[i] != b[i])//发现不相同的就开始从第一个字符串a中往后找与b[i]相同的字符{for(j = i + 1; j < len; j++){if(a[j] == b[i]){count += j - i;//找到相同的计算移动次数a[j] = a[i];//记得把a[j]处的值换成a[i]break;}}}}printf("%d\n", count);}return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c