描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
-
输入
-
多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。 样例输入
-
++-+--+ -++--++
样例输出
4
//刚开始理解错误,,输入时保证字串a,b长度相同。。将a变为b,+和-交换最终始a,b一样,若不存在输出-1(则a中的+和b中的+数量一样)
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int main() { char a[5000],b[5000]; while(cin>>a>>b) { int x=strlen(a); int i,j,t=0; int flag1=0,flag2=0; for(i=0;i<x;i++) { if(a[i]=='+') flag1++; if(b[i]=='+') flag2++; } if(flag1!=flag2) { cout<<"-1"<<endl; continue; } for(i=0;i<x;i++) { if(a[i]!=b[i]) { for(j=i+1;j<x;j++) { if(a[j]==b[i]) { swap(a[i],a[j]); t+=(j-i); break; } } } } cout<<t<<endl; } return 0; }