题解:CF2225B Alternating String

· · 题解

题意

定义交替字符串为没有相邻的字符相同的字符串。

t 组数据,每组给你一个由 ab 组成的字符串,你可以进行 \le1 次操作,使其变为交替字符串,操作为:

选定一个子串,可以但不是必须将所有字母 a 变为 字母 b,字母 b 变为字母 a,随后,必须将子串反转。

思路

cnt 为字符串 s 中满足 s_i=s_{i+1} 的字符对个数。

我们发现,进行对子串的反转或反转并翻转操作后,这最多只会改变左右两侧的字母与外界的相邻关系,例如ababba进行反转并反转操作后,变为baabab,故 cnt \le 2时满足条件。

现在这题就是朴素的判断题了。

AC CODE

#include<bits/stdc++.h>
using namespace std;
int t;
string s;
int main(){
    cin>>t;
    while(t--){
        cin>>s;
        int cnt=0,len=s.size();
        for(int i=1;i<len;i++)if(s[i]==s[i-1])c++;
        if(cnt<=2)cout<<"YES\n";
        else cout<<"NO\n";
    }
}