leetcode——(8)最長迴文字串

  • c語言寫的我簡直…所以換了python,代碼直接是參考的代碼

代碼

class Solution(object):
    def longestPalindrome(self, s):
        size = len(s)
        if size <= 1:
            return s
        # 二維 dp 問題
        # 狀態:dp[l,r]: s[l:r] 包括 l,r ,表示的字符串是不是迴文串
        # 設置爲 None 是爲了方便調試,看清楚代碼執行流程
        dp = [[False for _ in range(size)] for _ in range(size)]

        longest_l = 1
        res = s[0]

        # 因爲只有 1 個字符的情況在最開始做了判斷
        # 左邊界一定要比右邊界小,因此右邊界從 1 開始
        for r in range(1, size):
            for l in range(r):
                # 狀態轉移方程:如果頭尾字符相等並且中間也是迴文
                # 在頭尾字符相等的前提下,如果收縮以後不構成區間(最多隻有 1 個元素),直接返回 True 即可
                # 否則要繼續看收縮以後的區間的迴文性
                # 重點理解 or 的短路性質在這裏的作用
                if s[l] == s[r] and (r - l <= 2 or dp[l + 1][r - 1]):
                    dp[l][r] = True
                    cur_len = r - l + 1
                    if cur_len > longest_l:
                        longest_l = cur_len
                        res = s[l:r + 1]
            # 調試語句
            # for item in dp:
            #     print(item)
            # print('---')
        return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章