zoukankan      html  css  js  c++  java
  • leetcode[5]Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

    class Solution {
    public:
        string preProcess(string s)
        {
            string res;
            int n=s.length();
            if(0==n)
            {
                res="~@";
                return res;
            }
            res="~";
            for(int i=0;i<n;i++)
            res+="#"+s.substr(i,1);
            res+="#@";
            return res;
            
        }
        string longestPalindrome(string s) {
            string T=preProcess(s);
            int n=T.length();
            int *p=new int[n];
            int C=0;
            int R=0;
            for(int i=1;i<n-1;i++)
            {
                int i_mirror=2*C-i;
                p[i]=(R>i)?min(R-i,p[i_mirror]):0;
                while(T[i-p[i]-1]==T[i+p[i]+1])
                {
                    p[i]++;
                }
                if(i+p[i]>R)
                {
                    R=i+p[i];
                    C=i;
                }
            }
            int maxlen=0;
            int center=0;
            for(int i=1;i<n-1;i++)
            {
                if(p[i]>maxlen)
                {
                    maxlen=p[i];
                    center=i;
                }
            }
            delete []p;
            return s.substr((center-1-maxlen)/2,maxlen);
        }
    };
  • 相关阅读:
    Best Time to Buy and Sell Stock II
    Subsets II
    Subsets I
    Combinations
    Permutation Sequence
    Next Permutation
    Anagrams
    Combination-Sum II
    Combination-Sum I
    Permutations II
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4283719.html
Copyright © 2011-2022 走看看