1. 程式人生 > 其它 >5 求解最長迴文子串

5 求解最長迴文子串

技術標籤:刷題leetcode演算法python

leetcode – 5 求解最長迴文子串 – python

在這裡插入圖片描述
看了一下排名在前的程式碼,使用的是兩重迴圈, 對字串和反轉的字串進行比較,判斷是否是迴文串

class Solution:
    def longestPalindrome(self, s):
        size = len(s)

        if size < 2:    # 空串和一個字元都是迴文
            return s

        max_length = 1
        start = 0   # 用來儲存當前最長迴文串的第一個字元下標
# 建立二維陣列,長度為size*size,將此二維陣列上的所有格子的值設定為False dp = [[False for _ in range(size) ]for _ in range(size)] # 對角線上的字串都是迴文串 for i in range(size): dp[i][i] = True # 二重迴圈字串,尾指標j從1開始到字串結尾, 頭指標i從0開始到j結束 for j in range(1, size): for i in
range(0, j): if s[i] == s[j]: # 首尾字元相同 if j- i < 3: # 並且字串長度小於4,一定是迴文串 dp[i][j] = True else: # 本級子串是否是迴文串, 取決於下層本級子串的子串,如果 # 子串的子串是迴文串,那麼本機子串一定是迴文串 # 這就是動態規劃演算法的關鍵:使用下層已經解決的問題來解決上層問題
dp[i][j] = dp[i+1][j-1] else: dp[i][j] = False if dp[i][j]: # 如果是迴文串,判斷是否是最長迴文串 cur_len = j - i + 1 # 當前迴文串的長度 if cur_len > max_length: max_length = cur_len start = i