zoukankan      html  css  js  c++  java
  • 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.

    这道求最长回文子串的题目非常经典,也有非常多的解法。DP是其中非常经典的解法。具体解法有: 1:DP, 2:枚举中心,向两边走.

    DP代码python代码会超时, C++代码如下:

    class Solution {
    public:
        string longestPalindrome(string s) {
            const int n = s.size();
            int maxlen = 1, start = 0;
            bool f[n][n];
            fill_n(&f[0][0],n*n,false);
            
        for (int j=0;j<n;j++){
            f[j][j] = true;
            for(int i=0;i<j;i++){
                f[i][j] = (s[i]==s[j]&&(i+1>j-1||f[i+1][j-1]));
                if (f[i][j] and j-i+1 > maxlen){
                    maxlen = j-i+1;
                    start = i;
                }
            }
        }
        return s.substr(start,maxlen);
        }
    };

    枚举中心:

    class Solution(object):
        def longestPalindrome(self, s):
            """
            :type s: str
            :rtype: str
            """
            if len(s)==0:
                return 0
            maxLen=1
            start=0
            for i in xrange(len(s)):
                if i-maxLen >=1 and s[i-maxLen-1:i+1]==s[i-maxLen-1:i+1][::-1]: #剪枝
                    start=i-maxLen-1
                    maxLen+=2
                    continue
    
                if i-maxLen >=0 and s[i-maxLen:i+1]==s[i-maxLen:i+1][::-1]:
                    start=i-maxLen
                    maxLen+=1
            return s[start:start+maxLen]
  • 相关阅读:
    主席树模板之区间问题
    简易版第k大(权值线段树+动态开点模板)
    Irrigation
    Petya and Array
    H. Pavel's Party(权值线段树)
    权值线段树入门
    位数差(二分)
    ZYB's Premutation(树状数组+二分)
    单调队列入门
    javaBean为什么要implements Serializable?
  • 原文地址:https://www.cnblogs.com/sherylwang/p/5461751.html
Copyright © 2011-2022 走看看