题解 | #最长回文子串#

最长回文子串

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

全部评论

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务