这道题目的在于如何将S串变为T串,可以用贪心来找出最优策略,根据题意,我们可以得知想要得出最少的策略,就只能一次就成,因此我们可以直接遍历,遇到需要翻转的就直接进行翻转,而翻转一次后没有满足要求的直接输出-1即可
上代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
string s1, s2;//s1是目标串,s2是原串
int cnt = 0;
int main(void)
{
int T; cin >> T;
while (T--) {
cin >> s1 >> s2;
int n = s1.size();
cnt = 0;
for (int i = 1; i < n; i++) {
if (s1[i] == s2[i]) continue;
if (s2[i + 1] == s2[i - 1] && s2[i - 1] == s1[i]) {
s2[i] = s2[i - 1];
cnt++;
}
}
if (s1 == s2) cout << cnt << endl;
else cout << -1 << endl;
}
return 0;
}