+-字符串
时间限制:
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; }
-
多组测试数据