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.

Example 1:

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Example 2:

Input: "cbbd"
Output: "bb"

1.动态规划来求解

class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        res=''
        for i in range(len(s)):
            m=self.helper(s,i,i)
            if len(m)>len(res):
                res=m
            n=self.helper(s,i,i+1)
            if len(n)>len(res):
                res=n
        return res
    def helper(self,s,l,r):
        while l>=0 and r<len(s) and s[l]==s[r]:
            l-=1;
            r+=1;
        return s[l+1:r]

2. expand arround center

c++:

class Solution {
public:
    string longestPalindrome(string s) {
        if(s.empty()) return "";
        if(s.size()==1) return s;
        int start=0,max_len=1;
        for (int i=0;i<s.size();){
            if (s.size()-i<=max_len/2) break;
            int j=i,k=i;
            while(k<s.size()-1 && s[k+1]==s[k]) k++;
            i=k+1;
            while(k<s.size()-1 && j>0 && s[k+1]==s[j-1]){++k;--j;}
            int new_len=k-j+1;
            if(new_len>max_len){
                start=j;
                max_len=new_len;
            }
        }
        return s.substr(start,max_len);
    }
};

这里跟动态规划差不多  也是一一扩大,不过这里进行了 重复值的识别,可以将两次求最大回文序列  变成一次求最大回文序列。

posted @ 2018-09-05 22:51  zx-y  阅读(79)  评论(0编辑  收藏  举报