因为这题可以从不同的地方把项链截断,然后向两边开始找相同的珠子。。所以我们可以想到可以把三串项链合并,然后枚举中间一串中截断的位置,向前向后分别找。。记录个数就可以了。。

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

发表评论

电子邮件地址不会被公开。

Post Navigation