Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.python
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:code
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