题目:传送门
思路: 因为我们要保证颜色交错,那么给定我一个序列后,就只有两种可以满足条件的最终序列,即以’R’颜色开头和以‘B’颜色开头,所以我们把两种情况分别讨论一下,取最小值即可。
在计算某种情况下需要的操作数时,如何第 i 位的颜色一样,我们当然最优考虑是不管它,如果不同,我们就统计不同时这个位置是 R 或是 B 的个数hr,hb。因为需要b的位置(这个位置上是R)有hr 个,需要r的位置(这个位置上是B)有hb个,我们可以交换的个数就是 m = min(hr,hb) ,剩下的就是需要改变颜色的次数,二者相加,刚好为hr , hb 的最大值!
#include <iostream>
using namespace std;
string sta="rb";
int hr,hb,ans;
int main() {
int n;
cin>>n;
string s;
cin>>s;
ans = 1e9;
hr=0,hb=0;
for(int i=0;i<s.size();i++) {
if(s[i] != sta[i%2]) {
if(s[i]=='r') {
hr++;
}
else {
hb++;
}
}
else continue;
}
ans = min(ans,max(hr,hb));
hr = 0;
hb = 0;
for(int i=0;i<s.size();++i) {
if(s[i] != sta[(i+1)%2]) {
if(s[i]=='r') {
hr++;
}
else {
hb++;
}
}
else continue;
}
ans = min(ans,max(hr,hb));
cout<<ans<<endl;
return 0;
}