+-字符串
时间限制:
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;
}