题解 | #最长回文子串#

最长回文子串

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;
}
全部评论

相关推荐

敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务