zoukankan      html  css  js  c++  java
  • Longest Palindromic Substring

    Total Accepted: 82026 Total Submissions: 379898 Difficulty: Medium

    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.

    Subscribe to see which companies asked this question

    Show Tags
     

    1.动态规划

    class Solution {
    public:
        string longestPalindrome(string s) {
            int sSize = s.size();
            if(sSize <=1){
                return s;
            }
            int start = 0;
            int maxLen = 1;
            bool help[1000][1000] = {false};
            for(int i=0;i<sSize;i++){
                help[i][i] = true;
                if(i>0 && s[i-1]==s[i]){
                    help[i-1][i] = true;
                    start = i-1;
                    maxLen = 2;
                }
            }
            for(int len = 3;len<=sSize;len++){
                for(int i=0;i<=sSize-len;i++){
                    int j = i+len-1;
                    if(help[i+1][j-1] && s[i]==s[j]){
                        help[i][j] = true;
                        start = i;
                        maxLen = len;
                    }
                }
            }
            return s.substr(start,maxLen);
        }
    };

    2.中心扩展

    3.manacher

    class Solution {
    public:
        void preProcess(string &s,int sSize,string& copedStr){
            for(int i=0;i<sSize;i++){
                copedStr.push_back('*');
                copedStr.push_back(s[i]);
            }
            copedStr.push_back('*');
        }
        string longestPalindrome(string s) {
            int sSize = s.size();
            if(sSize<=1){
                return s;
            }
            string str;
            preProcess(s,sSize,str);
            int strSize = 2*sSize+1;
            vector<int> parr(strSize,1);
            int mid = 0;
            int left =-1,right = 1;
            int pl = -1, pr = 1;
            int radius = 0;
            for(;right<strSize;right++){
                radius = 0;
                if(right>=pr){
                    while((right-radius>=0 && right+radius<strSize) && str[right-radius]==str[right+radius]){
                        radius++;
                    }
                    parr[right] = radius;
                }else{
                    left = mid - (right-mid);
                    if(left - parr[left] +1 < pl+1){
                        parr[right] = left - pl;
                    }else if(left - parr[left] +1 > pl+1){
                        parr[right] = parr[left];
                    }else{
                        radius = parr[left]-1;
                        while((right-radius>=0 && right+radius<strSize) && str[right-radius]==str[right+radius]){
                            radius++;
                        }
                        parr[right] = radius;
                    }
                }
                radius = parr[right] ;
                if(right + radius >= pr){
                    pr = right + radius ;
                    pl = right - radius ;
                    mid = right;
                }
            }
            int maxLen = 0, pos = 0;
            for(int i=1;i<strSize;i++){
                int tmpRadius = i%2==0 ? parr[i]-1:parr[i];
                if(tmpRadius>maxLen ){
                    pos = i;
                    maxLen = parr[i]-1;
                }
            }
            string res;
            for(int i=pos-maxLen;i<=pos+maxLen;i++){
                if(i%2!=0){
                    res.push_back(str[i]);
                }
            }
            return res;
        }
    };
  • 相关阅读:
    如何在 Windows 7 安裝 SharePoint Server 2010
    SharePoint 2010 WSP包部署过程中究竟发生什么?
    SharePoint 2010 部署 WSP 包
    SharePoint 2010在win7 x64 安装
    在Sharepoint2010中发布VS2010开发的WebPart
    在User Profile Service中配置AD的同步连接
    Sharepoint数据库存储过程
    SharePoint对象模型性能考量
    对SharePoint 2007数据库中一些数据表的使用
    SharePoint Services 数据库表
  • 原文地址:https://www.cnblogs.com/zengzy/p/5027637.html
Copyright © 2011-2022 走看看