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