AcWing 1208. 翻硬币
原题链接
简单
作者:
满目星河_0
,
2021-04-16 12:18:12
,
所有人可见
,
阅读 247
C++ 代码
//算法思想:我们在对硬币进行反转的时候发现,对于中间的硬币进行翻转的时候,可以让它左边或者右边的硬币
//产生连锁反应。不妨规定一个规则,当我们翻一个硬币的时候,只能对它右边的硬币产生连锁反应,于是我们可
//以从左向右对字符串进行遍历,如果遇见不一样的地方就进行翻转,遍历过的地方就再也不去改变,这样的话时
//间复杂度就是O(n).只需遍历一次并输出翻转的次数就可以了。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
string a,b;
int count1;
void turn(int x){
if(b[x]=='*') b[x]='o';
else{ b[x]='*';}
//printf("###########\n");
}
int main(){
cin>>a>>b;
for(int i=0;i<a.size();i++){
if(a[i]!=b[i]) {
turn(i);
turn(i+1);
count1++;
}
}
printf("%d",count1);
return 0;
}