leetcode 5

題目

5. 最長(zhǎng)回文子串

給定一個(gè)字符串 s,找到 s 中最長(zhǎng)的回文子串。你可以假設(shè) s 的最大長(zhǎng)度為 1000。

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個(gè)有效答案。

示例 2:

輸入: "cbbd"
輸出: "bb"

思路1

從頭開(kāi)始遍歷字符串, 以遍歷到的字符為中心,向兩邊擴(kuò)散, 每擴(kuò)散一位,對(duì)比一下兩邊的值,直到不等時(shí) 記錄下 最長(zhǎng)的擴(kuò)散范圍,就是最長(zhǎng)的回文字串。

注意: 擴(kuò)散 起點(diǎn) 有2種情況,第一種 如 1 2 1, 此時(shí)一個(gè)中心; 第二種 1 2 2 1, 此時(shí)2個(gè)中心。

class Solution:
    def longestPalindrome(self, s: str) -> str:
        res = ""
        for i in range(len(s)):
            # 1 2 1, 從同一元素開(kāi)始向兩邊
            tmp = self.helper(s, i, i)
            if len(tmp) > len(res):
                res = tmp
            
            # 2 1 1 2, 從挨著的2個(gè)元素開(kāi)始,向兩邊
            tmp = self.helper(s, i, i+1)
            if len(tmp) > len(res):
                res = tmp
        return res
    
    def helper(self, s, l, r):
        while l >= 0 and r <= len(s)-1 and s[l] == s[r]:
            l -= 1
            r += 1
        # while退出時(shí), l多減了1, r多加了1, 返回時(shí)需要補(bǔ)償回來(lái)
        return s[l+1: r]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容