5. 最長迴文子串(動態規劃算法)

#動態規劃,主要利用若是i+1到j-1是迴文字符串且s[i]==s[j]那麼i 到 j也是迴文字符串
1
class Solution: 2 def longestPalindrome(self, s): 3 """ 4 :type s: str 5 :rtype: str 6 """ 7 n=len(s) 8 aa=[0]*(n*n) 9 longest='' 10 for i in range(n): 11 aa[i*n+i]=1 #單個字符確定是迴文字符串,用於迴文長度爲3的判斷 12 longest=s[i] 13 for i in range(n-1): 14 if s[i]==s[i+1]: 15 aa[i*n+i+1]=1 #若是兩個字符相同,那麼它們也構成迴文字符串,用於迴文長度爲4的判斷 16 longest=s[i:i+2] 17 for l in range(3,n+1): 18 for i in range(0,n-l+1): 19 e=l+i-1 20 if (aa[(i+1)*n+e-1] & int(s[i]==s[e])): 21 longest=s[i:e+1] 22 aa[i*n+e]=1 23 return longest 24
相關文章
相關標籤/搜索