【程式碼題python】【leetcode】:最長迴文串
阿新 • • 發佈:2021-02-06
題目
給定一個字串 s,找到 s 中最長的迴文子串
迴文串示例:abcba
給定字串:sssabcba1da
(參考leetcode評論區)
程式碼
"""
dp方程
dp[i][j]代表s[i~j]是否為迴文串,是為1,不是為0
dp[i][i]=1
if s[i]==s[i+1] dp[i][i+1]=1
s[i]=s[i+len]&&dp[i+1][i+len-1]==1 => dp[i][i+len]=1
"""
def longestPalindrome (s):
n = len(s)
dp = [[0] * n for i in range(n)] # 初始化dp
max_len = 0
res = ""
for i in range(n):
for j in range(i, -1, -1):
if s[i] == s[j] and (i - j < 2 or dp[i - 1][j + 1]): # 滿足這個條件,i到j是迴文串
dp[i][j] = 1
if dp[i][j] and i - j + 1 > max_len: # 更新max_len
max_len = i - j + 1
res = s[j:i + 1]
return res
s1 = 'sssabcba1da'
print(longestPalindrome(s1))
結果