''' 解题思路: 动态规划算法, dp[i][j]定义为:如果dp[i][j]为1,则表示字符串从i到j是回文子串, 如果dp[i][j]为0,则表示字符串从i到j不是回文子串。 1、当i==j时,dp[i][j]==1 2、当j-i<=2时,如s[i]==s[j],dp[i][j]==1 3、其它情况,如s[i]==s[j],当dp[i+1][j-1]==1,则dp[i][j]==1 由于递推公式: dp[i][j] = dp[i+1][j-1]==1,条件是s[i]==s[j],i要从大的数值,j要从小的数值开始计算 #============================================================================================= ''' # -*- coding:utf-8 -*- class Solution: def getLongestPalindrome(self, A, n): # write code here #print(A) #print(n) dp = [[0]*n for _ in range(n)] maxlen = 1 str1 = '' for i in range(n-1,-1,-1): for j in range(i,n): if A[i]==A[j]: if j-i<=2: dp[i][j] = 1 else: dp[i][j] = dp[i+1][j-1] if dp[i][j]==1 and j-i+1>maxlen: maxlen = j-i+1 # str1 = A[i:j+1] #for i in dp: # print(i) #print(str1) return maxlen A = 'abc1234321ab' # 7 n = len(A) s = Solution() print(s.getLongestPalindrome(A,n))