這題做了有一段時間,主要是題目問題的抽象遇到了一點問題
尤其是在尋找最大的相同顏色的串的時候蘿莉節不是透徹
不一定是要左邊右邊的不一樣,比如bb*bb這種情況也是可以認為是尋找左右兩遍的不一樣的
下面的代碼把這題複雜化了,再寫一遍這題吧
/*
NAME: zfb2
LANG: C++
TASK: beads
*/
#include <iostream>
#include <fstream>
#include <string.h>
#include <string>
using namespace std;
int
main()
{
freopen("beads.in", "r", stdin);
freopen("beads.out", "w", stdout);
char a[1200];
int t, j, k, lr, lb, max=0;
int maxr=0, maxb=0;
cin>>t>>a;
for(int i=t; i<=3*t-1; i++){
a[i]=a[i-t];
}
a[3*t]='\0';
//cout<<a<<endl;
for(int i=t; i<3*t; i++){
if(a[i]=='r'){
lr=lb=0;//brr
j=i;
while((a[j]=='r' || a[j]=='w') && j>=0 && j<3*t){
lr++;
j++;
}
k=i-1;
while((a[k]=='b' || a[k]=='w') && k>=0 && k<3*t){
lb++;
k--;
}
if(max<lr+lb)max=lr+lb;
}
else if(a[i]=='b'){
lr=lb=0;//rbb
j=i;
while((a[j]=='b' || a[j]=='w') && j>=0 && j<3*t){
lr++;
j++;
}
k=i-1;
while((a[k]=='r' || a[k]=='w') && k>=0 && k<3*t){
lb++;
k--;
}
if(max<lr+lb)max=lr+lb;
}
else{
lr=lb=0;//bwr
j=i;
while((a[j]=='r' || a[j]=='w') && j>=0 && j<3*t){
lr++;
j++;
}
//cout<<lr<<endl;
k=i-1;
while((a[k]=='b' || a[k]=='w') && k>=0 && k<3*t){
lb++;
k--;
}
if(max<lr+lb)max=lr+lb;
lr=lb=0;//rwb
j=i;
while((a[j]=='b' || a[j]=='w') && j>=0 && j<3*t){
lr++;
j++;
}
k=i-1;
while((a[k]=='r' || a[k]=='w') && k>=0 && k<3*t){
lb++;
k--;
}
if(max<lr+lb)max=lr+lb;
}
}
if(max>=t)max=t;
cout<<max<<endl;
//cin>>t;
return 0;
}