Longest Palindromic Substring

Posted summerkiki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Longest Palindromic Substring相关的知识,希望对你有一定的参考价值。

求最长回文子串:

回文串是指正着读和反过来读都一样的字符串。

方法:

1. 为了统一解题方法,避免字符串长度奇偶对解题方法的影响,加入了填充字符。若原来的字符串长度为n,则新的字符串长度为2n+1。

2. pos+p[pos] 表示的是目前所有回文子串中,向右达到的最远位置。

3. 先利用对称性,找到p[i]的最小值,然后再进行搜索。

4. 注意数组不要越界!!

class Solution {
public:
    string longestPalindrome(string s) {
        int pos=0;
        string sub=s;
        int maxpos=0;
        if(!s.size())
            return sub;
        vector<int> p(2*s.size()+1,1);
        vector<char> str;
        for(int i=0;i<2*s.size()+1;i++)
        {
            if(i%2==0)
                str.push_back(#);
            else
                str.push_back(s[i/2]);
        }
        cout<<"new size:"<<str.size()<<endl;
        for(int i=1;i<2*s.size();i++)
        {
            if(i<p[pos]+pos)
            {
                int j=2*pos-i;
                p[i]=min(p[j],p[pos]+pos-i);
            }
            while(i+p[i]<2*s.size()+1&&i-p[i]>=0)
            {
                if(str[i+p[i]]==str[i-p[i]])
                    p[i]++;
                else
                    break;
            }
            if(p[maxpos]<p[i])
                maxpos=i;
            if(p[pos]+pos<p[i]+i)
                pos=i;
        }
        cout<<maxpos<<endl;
        int begin=(maxpos-p[maxpos]+2)/2;
        cout<<begin<<endl;
        for(int i=0;i<2*s.size()+1;i++)
            cout<<p[i]<< <<endl;
        sub=s.substr(begin,p[maxpos]-1);
        return sub;
    }

 

以上是关于Longest Palindromic Substring的主要内容,如果未能解决你的问题,请参考以下文章

Longest Palindromic Substring

5. Longest Palindromic Substring

[Leetcode]Longest Palindromic Substring

LeetCode:Longest Palindromic Substring

leetcode--5. Longest Palindromic Substring

#Leetcode# 5. Longest Palindromic Substring