试题 E:翻转
不妨设先后输入的两个字符串为 s1
、s2
。有如下性质:
- 首尾两处是无法通过翻转改变本身字符值。若首尾处字符不相同则直接输出
-1
- 对中间的字符采取遍历的方式,如果
s1[i] != s2[i]
,则需考虑能否通过翻转使得二者相同- 如果
s2[i-1] == s2[i+1] && s2[i] != s2[i-1]
,则说明可通过翻转使二者相同 - 否则无法通过翻转使二者相同
- 如果
#include <iostream>
#include <string>
using namespace std;
void solve() {
string s1, s2;
cin >> s1 >> s2;
int ans = 0;
// 首位不同或者末尾不同,直接输出-1
if (s1[0] != s2[0] || s1.back() != s2.back()) {
cout << -1 << endl;
return;
}
// 遍历中间的字符,如果不同,判断是否可以通过替换相邻字符来实现
for (int i = 1; i < s1.size() - 1; i++) {
if (s1[i] != s2[i]) {
if (s2[i - 1] == s2[i + 1] && s2[i] != s2[i - 1]) {
ans++;
s2[i] = s1[i];
} else {
cout << -1 << endl;
return;
}
}
}
cout << ans << endl;
}
int main() {
int D;
cin >> D;
while (D--) {
solve();
}
return 0;
}