题目描述
就是说每次变换两个字符,使其与目标字符匹配,这里的思路是采用固定长度的滑动窗口,长度为2,每次翻转实现窗口之前的字符是匹配的,这样只需要遍历一遍字符串即可完成。
同时,每次翻转两个字符,确保前一个字符匹配成功,可能会造成第二个字符不再匹配,故而窗口滑动步幅为1.
C++ 代码
#include <iostream>
using namespace std;
void overturn (string &s1, int left) {
s1[left] = s1[left] == 'o' ? '*' : 'o';
s1[left+1] = s1[left+1] == 'o' ? '*' : 'o';
}
int main () {
string s1, s2;
cin >> s1 >> s2;
int count = 0;
// [l, l+1] 维护长度为2的滑动窗口
for (int l = 0; l < s1.size() - 1; l ++) {
if (s1[l] != s2[l]) {
overturn(s1, l);
count ++;
}
}
cout << count;
}