构造题,把整个串想象成一个环。每次把环断开并反转的时候从切口处看进去的顺序是和刚开始从头到尾的顺序是一样的。于是每次不管如何翻转最后都要找到这个环上最大的连续子段长度
#include<bits/stdc++.h> using namespace std; string s; int main() { cin>>s; int tmp=s.size(); s=s+s; int ans=0; int len=1; for(int i=0;i<(int)s.size()-1;i++) { if(s[i]=='b'&&s[i+1]=='w'||s[i]=='w'&&s[i+1]=='b') { len++; } else { ans=max(ans,len); len=1; } } ans=max(len,ans); printf("%d\n",min(ans,tmp)); }