思维
其实想起来也很容易 只需要枚举一下两个字符串的不同点 看看能否满足题意进行翻转 可以的话就反转
但是如果首位或末位就不一样的话那可以直接break了 因为想要反转必须保证此位左右两边有数字且此位与邻位不同
那必然就是能反转就反转就如果你不反转就肯定得不到答案是这样的吧
最后判断一下反转过后的是否和标准字符串相等就好了 当然也可以从不能反转的地方做标记 直接就判错 都可以
$ C ++ $
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
while (n --)
{
string d;
string s;
cin >> d >> s;
int res = 0;
int m = d.size();
bool flag = false;
for (int i = 0; i < m; i ++ )
{
if (d[i] != s[i])
{
if (i == 0 || i == m - 1)
{
flag = true;
break;
}
if (s[i - 1] == s[i + 1] && s[i - 1] != s[i])
{
s[i] = s[i - 1];
res ++;
}
}
}
if (s != d) flag = true;
if (!flag) cout << res << endl;
else cout << -1 << endl;
}
return 0;
}