这题目十分的通俗易懂,简单的解释下,遇到上下两个字符串不同的就需要转换成相同的。然后又连续的不同点可以记为一次转换。比如GHGH和HGHG的转换只需要一次,而GHGH和HGGG需要两次转换,分别是把第一个“H”和第二个“G”一起转换“HG”-->“GH”,然后转换最后一个“G”-->“H”
ok题目看明白了,这题的思路其实和我之前讲的一道题是很相似的 传送门:低洼地c++_Randy080303的博客-CSDN博客
为什么我说十分相似,因为,两个题目都是需要判断一个串是不是连续性的。那一题的连续条件就是不出先一个点比前面的点高,而这个的连续条件是不出现两个相同的字母(因为这样的话他的整体转换就被迫分割成两次转换了)
行,代码也非常的相似,都是在检测到不同字母的时候往下遍历,出现相同字母的时候更新坐标,然后ans++,然后继续判断
if(aft[i]!=bef[i])
{
for(int j=i+1;j<n;j++)
{
if(aft[j]!=bef[j])
{
i++;
continue;
}
break;
}
}
(为什么没有对于相同字幕的条件判断是因为两个判断结果分别为break 和continue,而continue会直接略过后面的break,所以不需要)
好的接下来是全代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string bef,aft;
cin>>aft>>bef;
int ans=0;
for(int i=0;i<aft.size();i++)
{
if(aft[i]==bef[i])
{
continue;
}
if(aft[i]!=bef[i])
{
for(int j=i+1;j<n;j++)
{
if(aft[j]!=bef[j])
{
i++;
continue;
}
break;
}
}
ans++;
}
cout<<ans;
return 0;
}
求点赞_(≧∇≦」∠)_