题面:https://ac.nowcoder.com/acm/contest/549/B

寻找一个字符串中的最长回文子串;

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

找回文子串可以从两端开始,但也可以从中间扩展出去;

可以将环形的字符串展开成直线型;

#include<iostream>
#include<cstring>
using namespace std;
const int maxn=5e3+10;
char s[2*maxn];
int len,ans;
int check(int l,int r);
int main()
{
    ans=-1;
    cin>>s;
    len=strlen(s);
    for(int i=0; i<len; i++)
        s[len+i]=s[i];
    for(int i=0; i<2*len; i++)
    {
        int cnt,l,r;
        cnt=1,l=i-1,r=i+1;
        while(check(l,r))
        {
            if(s[l]==s[r])
            {
                cnt+=2;
                l--;
                r++;
            }
            else
                break;
        }
        ans=max(ans,cnt);
        cnt=0,l=i,r=i+1;
        while(check(l,r))
        {
            if(s[l]==s[r])
            {
                cnt+=2;
                l--;
                r++;
            }
            else
                break;
        }
        ans=max(ans,cnt);
    }
    cout<<ans<<endl;
    return 0;
}
int check(int l,int r)
{
    if(l>=0&&r<2*len&&r-l+1<=len)
        return 1;
    return 0;
}

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄