0005. Longest Palindromic Substring
Medium | String + DP | 80 ms (99.34%), 13.5 MB (92.93%)
Input: s = "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Input: s = "cbbd"
Output: "bb"
Input: s = "a"
Output: "a"
Input: s = "ac"
Output: "a"class Solution:
def longestPalindrome(self, s: str) -> str:
# (base case)
if len(s) < 2: return s
# ==================================================
# Dynamic Programming =
# ==================================================
# time : O(n^2)
# space : O(n^2)
ret = ''
# dp[i][j] = True mean s[j:i] = Palindrome
dp = [[None] * len(s) for i in range(len(s))]
for i in range(len(s)):
for j in range(i+1):
if i == j: dp[i][j] = True
elif i == j+1: dp[i][j] = s[i] == s[j]
else: dp[i][j] = (dp[i-1][j+1] and s[i] == s[j])
if dp[i][j] and i - j + 1 > len(ret): ret = s[j:i+1]
return retLast updated