描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
-
输入
-
多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。 样例输入
-
++-+--+ -++--++
样例输出
-
4
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
int sum=0;
char a[5001]={0};
char b[5001]={0};
while(scanf("%s%s",a,b)!=EOF)
{
sum=0;
int i=0,j=0;
while(a[i]&&b[i])
{
if(a[i]=='+'&&b[j]=='+')
{
sum+=fabs(i-j);
i++;
j++;
continue;
}
if(a[i]!='+')
i++;
if(b[j]!='+')
j++;
}
if(strlen(a)!=strlen(b))
printf("-1\n");
else
printf("%d\n",sum);
}
return 0;
}