分析:
一看到题目要求从已有状态变到目标状态,而且是最小步数,其实很容易想到bfs。但是结合数据,那么最坏会有2^1000种状态。那我们会想到这肯定是一道规律题,或者说,贪心。
思路:
举个栗子,下面两个字符串
o##和###
一、 初始字符串的第一个字符一定会被翻一次。也就是说,不管结果怎样,前两个字符一定会翻一次。也不是两次,因为多翻就等于没翻。
二、那现在就变成了#o#和###。那么我们已经不用管第一个字符了,它已经相同了扔掉就好了。也就是o#和##。重复第一步。
结论
我们只需要从前往后看,不同我们就把它和下一个字符翻面,因为它一定要翻!这样一定是最优的。
最后给大家一句话
“贪心法总是不在乎过程,只在乎结果。”
代码
#include <bits/stdc++.h>
using namespace std;
string a,b;
int main()
{
cin>>a>>b;
int ans=0;
for(int i=0;i<a.length();i++)
{
if(a[i]!=b[i])
{
if(a[i]=='o') a[i]='*';
else a[i]='o';
if(a[i+1]=='o') a[i+1]='*';
else a[i+1]='o';
ans++;
}
}
cout<<ans;
}