本文主要是介绍nyoj 915 +-字符串 【字符串】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
+-字符串
时间限制: 1000 ms | 内存限制: 65535 KB
难度: 1
- 描述
- Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
- 输入
- 多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。 输出 - 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。 样例输入
-
++-+--+ -++--++
样例输出 -
4
- 多组测试数据
思路:从左往右对b,a串比较,如果A[I] != B[I],将那后面的来补,如果后面找不到,那么直接跳出循环,否则加上往后查找的长度。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define M 5005
char a[M], b[M];
bool vis[M];
int main(){while(scanf("%s%s", a, b) == 2){int ans = 0, i, j, flag = 0, flag2;int la = strlen(a), lb = strlen(b);if(la != lb) flag = 1;else{for(i = 0; i < lb; i ++){if(b[i] != a[i]){for(j = i; j < la; j ++){flag2 = 0;if(a[j] == b[i]){a[j] = a[i];ans += (j-i);flag2 = 1; break;}}if(flag2 == 0){flag = 1; break;} }}}if(!flag) printf("%d\n", ans);else printf("-1\n");}return 0;
}
这篇关于nyoj 915 +-字符串 【字符串】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!