文字列sを指定して、sで最も長い回文の部分文字列を見つけます。sの最大長は1000と想定できます。
例1:
入力:「babad」
出力:「bab」
注:「aba」も有効な回答です。
例2:
入力: "cbbd"
出力: "bb"
出典:LeetCode
class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
dp = [[False] * n for _ in range(n)]
ans = ""
for l in range(n):
for i in range(n):
j = i + l
if j >= len(s):
break
if l == 0:
dp[i][j] = True
elif l == 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 l + 1 > len(ans):
ans = s[i : j + 1]
return ans