题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507

    //使用中心拓展法,从每一个s[i]向左右两边拓展
    //使用maxlen来记录最长回文子串的长度
    //使用start来记录最长回文子串的起始index
    //每一次遍历的过程中:
    //对于每一个s[i],每次进入拓展前设置len为1,即它自己
    //使用left来记录当前回文子串的起始index
    //使用right来记录当前回文子串的结束index
    //每次对s[i]的拓展结束以后,比较len是否大于maxlen,更新maxlen并更新start=left
    //遍历完成以后,最长回文子串的起始index==start,结束index=maxlen;
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    getline(cin,s);
    int maxlen=0,start=0;
    int left=0,right=0;
    for(int i=0;i<s.size();i++)
    {
        int len=1;
        left=i,right=i;
        //向左拓展
        while(left-1>=0&&s[left-1]==s[i])
        {
            left--;
            len++;
        }
        //向右拓展
        while(right+1<s.size()&&s[right+1]==s[i])
        {
            right++;
            len++;
        }
        //向左右同时拓展
        while(left-1>=0&&right+1<s.size()&&s[left-1]==s[right+1])
        {
            left--;
            right++;
            len+=2;
        }
        //更新maxlen
        if(len>maxlen)
        {
            maxlen=len;
            start=left;
        }
    }

    cout<<maxlen<<endl;
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
菜鸡29号:根据已有信息能初步得出以下几点: 1、硕士排了大本和大专 2、要求会多语言要么是招人很挑剔要么就是干的活杂 3、给出校招薪资范围过于巨大,说明里面的薪资制度(包括涨薪)可能有大坑
点赞 评论 收藏
分享
北斗导航Compass低仿版:没必要写这么多东西,还是尽量浓缩成一页,自我评价,git和cursor Trae这些都可以去掉。实习经历的描述最好根据star法则改一下,别这么直白
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务