5. Longest Palindromic Substring
# Medium
Solution 1: radical extend
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
# edge case
if len(s) <= 1:
return s
# regular case
res = []
res_len = 0
for i in range(len(s)):
left, right = i, i
# if the longest palindromic substring is odd, 奇数
while left >=0 and right < len(s) and s[left] == s[right]:
if right - left + 1 > res_len:
res = s[left:right+1]
res_len = right - left + 1
left -= 1
right += 1
# if the longest palindromic substring is even,偶数
left, right = i, i+1
while left >= 0 and right < len(s) and s[left] == s[right]:
if right - left + 1 > res_len:
res = s[left:right+1]
res_len = right - left + 1
left -= 1
right += 1
return resTime complexity = , space complexity = .
Solution 2: Dynamic Programming
Use dp[i][j] to record from i to j is Palion or not. Key idea is: if s[i] = s[j] and dp[i+1][j-1] is Palion, then dp[i][j] is Palion.
T = , S =
Last updated
Was this helpful?