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.

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Input: "cbbd"
Output: "bb"
Expand around center:
class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        def expandAroudCenter(s,left,right):
            while left>=0 and right<len(s) and s[left]==s[right]:
                left=left-1
                right=right+1
            return right-left-1

        start=0
        end=0
       # return expandAroudCenter(s,2,2)
        for i in range(len(s)):
            len1=expandAroudCenter(s,i,i)
            len2=expandAroudCenter(s,i,i+1)
            length=max(len1,len2)
            if length>end-start+1:
                start=i-(length-1)//2
                end=i+length//2
        return s[start:end+1]

Dynamic programming:

class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        length=0
        dp = [[False] * len(s) for _ in range(len(s))]
      #  return dp
        for i in reversed(range(len(s))):
            for j in range(i,len(s)):
#without j-i  dp[i+1][j-1]will out of range 
                if  s[i]==s[j] and (j-i<3 or dp[i+1][j-1]==True):  
                    dp[i][j]=True
# without = it will be the lasted  Palindromic Substring     such as: babdb  result is bdb not bab   
                if dp[i][j]==True and length<=j-i+1: 
                    length=j-i+1
                    ans=s[i:j+1]    
        return ans     


posted @ 2018-06-13 15:01  zx-y  阅读(85)  评论(0编辑  收藏  举报