您的位置:首页 > 其它

nyoj 915 +-字符串 【字符串】

2014-10-13 13:23 176 查看


+-字符串

时间限制: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: