题解:P15629 [2019 KAIST RUN Spring] Rainbow Beads
题意解析
题目要求我们找到给定字符串中最长的不包含 VV,RV,VR,BV,VB,RR,BB 这
思路介绍
我们先来考虑不包含上述子串的子串的一些基本性质。容易看出,所有满足要求的长度极大的子串必定不会重叠,且由于单个字符满足条件,不存在一个满足条件的子串不是上面任何子串的子串。
我们换一个说法来解释这一点,那就是给定的字符串可以分割成若干个“色彩丰富”的长度极大的字符串,且长度最大的那一个必定能被分割出来。
于是,我们考虑使用双指针。记
代码分析
#include<bits/stdc++.h>
using namespace std;
string s;
int main(){
int ans=0;
int l=0,r=0;
cin>>s>>s;
do{
while(r<s.size()-1 && s[r]!=s[r+1] && s[r]!= 'V' && s[r+1]!='V') r++;
ans=max(ans,r-l+1);
l=r=r+1;
}while(r<s.size()-1);
cout<<ans;
}