搬运我的洛谷题解,原文创作时间: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;
}