力扣5题 最长回文子串
最长回文字符串
class Solution: def longestPalindrome(self,s): if not s: return 0,None #边界,字符为空 if len(s) <= 1: return 1,s #边界,只有一个 dp = [[False for _ in range(len(s))]for _ in range(len(s))] #状态定义,从某个端到某个端是否回文 longest = 1 #最长度初值为1 res = s[0] #其回文初值为第一个元素 for r in range(1,len(s)): #右下标从1到最后遍历 for l in range(r): #左下标从0到右下标遍历 if s[l]==s[r] and ((r-l)<=2 or dp[l+1][r-1]): #如果两端相等,并且下标差值小于等于2或者前一个字符串也是回文 dp[l][r] = True #就定义当前的字符串也是回文 cur_len = r-l+1 #此时的最大长度为r-l+1 if cur_len > longest: #如果当前的长度大于最大长度 longest = cur_len #将当前的长度进行缓存 res = s[l:r+1] #缓存当前的结果 return longest,res if __name__ == '__main__': solution = Solution() s = 'abaabcdcba' #回文是abcdcba,长度为7 longest,res = solution.longestPalindrome(s) print('最长为:',longest,',其子串为:',res)