题解:P15629 [2019 KAIST RUN Spring] Rainbow Beads

· · 题解

思路:

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

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

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

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

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

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

最后,完美输出即可!

直接上代码。

代码:

码风也是十分的好看啊。

#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;
}