由题目描述,我们可以知道如果用暴力遍历的话可能会报时间,因此我们可以通过贪心算法来完成该题,我们可以得知如果需要翻转,只能翻转相邻的两个硬币,因此我们可以从头到尾遍历,如果遇到不一样的可以直接将此位置和下一个位置进行翻转,如果和上一个位置进行翻转,就需要再进行遍历,并且可能影响答案,因此我们选择前一个方案
上代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int ans = 0;
void reverse(string& s1, int n)//进行翻转操作
{
if (s1[n] == '*') s1[n] = 'o';
else if (s1[n] == 'o') s1[n] = '*';
if (s1[n + 1] == '*') s1[n + 1] = 'o';
else if (s1[n + 1] == 'o') s1[n + 1] = '*';
return;
}
int main(void)
{
string s1, s2;//s1是初始状态,s2是目标状态
cin >> s1 >> s2;
int n = s1.size();
for (int i = 0; i < n - 1; i++) {
if (s1[i] != s2[i]) {
reverse(s1, i);
ans++;
}
}
cout << ans << endl;
return 0;
}