题解 | #最长回文子串#
最长回文子串
https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId=295&tqId=25269&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param A string字符串 # @return int整型 # class Solution: def getLongestPalindrome(self, A: str) -> int: # write code here # dp [i][j]表示A[i]到A[j]之间的字符串是回文串 dp = [[False for i in range(len(A))] for j in range(len(A))] #初始化最大长度为0 maxlength = 0 #i和j分别为从i到j的区间的字符能否构成回文串 #dp[i][j]=True表示能构成回文chuan #dp[i][j]=False表示不能构成回文串 for i in range(len(A) - 1, -1, -1): for j in range(len(A)): if A[i] == A[j]: #当A[i]=A[j]的时候,看下i到j的区间长度,区间长度大于1,要看中间区间的布尔值为True还是False,区间长度小于等于1,则一定为True比如区间长度为0表明i和j相等指向同一个元素,区间长度为1表明i和j之间的元素长度为1,再加上一个相等的元素,则构成2个相等的元素。回文了 if j - i <= 1: dp[i][j] = True maxlength = max(maxlength, j - i + 1) if j - i > 1: if dp[i + 1][j - 1] == True: dp[i][j] = True maxlength = max(maxlength, j - i + 1) for x in range(len(A)): print(dp[x]) return maxlength