-
输入
-
多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。 样例输入
-
++-+--+ -++--++
样例输出
-
4
分析:
输出-1的情况:两个字符串的长度不相同或者两个字符串中的+的个数不相同
非-1的情况: 要想变换的次数最少,并且相邻两个字符交换,那就需要记录两个字符串中每i个+号的位置,即第一个串中的第i个+号和第二个串中的第i个+号的位置,将这两个位置的差加起来,就是最少的 操作次数
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <string>
using namespace std;
int m[5001],n[5001];
int main()
{
string a,b;
while(cin >> a >> b)
{
int lena = a.length();
int lenb = b.length();
int g = 0,h = 0;
for(int i = 0;i < lena;i++)
{
if(a[i] == '+')
m[g++] = i;
}
for(int i = 0;i < lenb;i++)
{
if(b[i] == '+')
n[h++] = i;
}
if(lena != lenb||g != h)
{
cout << "-1" << endl;
return 0;
}
int sum = 0;
for(int i = 0;i < g;i++)
{
sum += abs(m[i]-n[i]);
}
cout << sum << endl;
}
return 0;
}