因为这题可以从不同的地方把项链截断,然后向两边开始找相同的珠子。。所以我们可以想到可以把三串项链合并,然后枚举中间一串中截断的位置,向前向后分别找。。记录个数就可以了。。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int main() { int i,j,k,n; char s[1200]; scanf("%d",&n); scanf("%s",s); for(i=0;i<n;i++) { s[i+n]=s[i]; s[i+n+n]=s[i]; } int maxx=-1; for(i=n;i<n+n;i++) { int cnt=0; char flaga=0,flagb=0; for(j=i-1;j>=0;j--) { if(flaga==0&&s[j]!='w') { cnt++; flaga=s[j]; continue; } if(s[j]==flaga||s[j]=='w') { cnt++; continue; } break; } for(j=i;j<=3*n-1;j++) { if(flagb==0&&s[j]!='w') { cnt++; flagb=s[j]; continue; } if(s[j]==flagb||s[j]=='w') { cnt++; continue; } break; } if(cnt>n) cnt=n; maxx=maxx>cnt?maxx:cnt; } printf("%d\n",maxx); return 0; }