搬运我的洛谷题解,原文创作时间:2026-03-06 20:32。

思路:

这道题可以先定义一个记录美丽的字符串目前的长度变量 $c$,再定义一个记录美丽的字符串的末位字符的字符 $l$,以及美丽的字符串中最长的长度变量 $ans$。

遍历输入的字符串,如果当前字符是紫色的话,就将 $c$ 和 $l$ 设为 $0$,因为只要是和紫色相邻的话,都是不美丽的,因为色盲会把紫色看成红或者蓝,所以不行。

如果不是,那看看 $c$ 是不是 $0$,是的话,就设为 $1$,并且把 $l$ 设为当前的字符。

如果不是,那看当前字符是否不等于 $l$,如果不等于,那么就可以将 $c$ 自增了,这是美丽的字符串。

如果这也不是,那么当前字符就是等于上一个字符 $l$ 了,把 $c$ 改回 $1$,$l$ 要设为当前字符。

这时候,要更新最大值了。

最后,完美输出即可!

直接上代码。

代码:

码风也是十分的好看啊。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    string s;
    cin>>s;
    int ans=1,c=0;
    char l=0;
    for(char ch:s){
        if(ch=='V'){
            c=0;
            l=0;
        }
        else{
            if(c==0){
                c=1;
                l=ch;
            }
            else{
                if(ch!=l){
                    c++;
                    l=ch;
                }
                else{
                    c=1;
                    l=ch;
                }
                if(c>ans) ans=c;
            }
        }
    }
    cout<<ans;
    return 0;
}