DP-leetcode5-最长回文子串
回文子串最短是3个元素,所以找最长时候必须是先找到这三个回文然后看这个回文子串的前一个元素和后一个元素,要是相同那就是还是回文子串,or记录下当前这个回文,往下继续查找。
子串dp = [i, j]
dp (i,j)=(dp (i+1,j−1) and Si==Sj)
25 def longestPalindrome(s):
26 n = len(s)
27 maxl = 0 #记录最长的回文子串
28 start = 0 # 最长回文子串的开始位置
29 for i in range(n):
#[i-maxl-1, i+1]:当前位置-已经存在的最长子串长度-前一个元素,
# i+1: 结束到当前位置。也就是判断dp (*i*,*j*) = dp (*i*+1,*j*−1) 是否回文
30 if i - maxl >= 1 and s[i-maxl-1: i+1] == s[i-maxl-1: i+1][::-1]:
31 start = i - maxl - 1
32 maxl += 2
33 continue
34 # 操作开始元素或者连续的相同元素时使用该方式
35 if i - maxl >= 0 and s[i-maxl: i+1] == s[i-maxl: i+1][::-1]:
36 start = i - maxl
37 maxl += 1
38 return s[start: start + maxl]
浙公网安备 33010602011771号