5. 最長回文子串-leetCode&python

1、題目
給你一個字符串 s,找到 s 中最長的回文子串。
如果字符串的反序與原始字符串相同,則該字符串稱為回文字符串。
示例1:
輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。

2、代碼

class Solution(object):
        def longestPalindrome(self,s):
            """
            中心擴散法:以當前字符向兩端擴散,找到最長子串。
            對于給定的字符串,遍歷字符串中的每一個字符或每兩個字符之間的空隙,將其作為回文子串的中心。
            對于每個可能的中心位置,從該位置向兩側擴展,直到不滿足回文條件為止。這一過程需要維護兩個指針,一個指向當前中心字符的左側,另一個指向當前中心字符的右側。
            在擴展的過程中,不斷更新當前回文子串的起始和結束索引,以及當前回文子串的長度。
            遍歷所有可能的中心位置,記錄最長的回文子串的起始和結束索引,即可得到最長回文子串。
            """
            if len(s) == 0:
                return ""
            sub_str = s[0]

            def aroundCenter(in_s, left, right):
                """
                從給定的左右索引開始,向兩側擴展,直到不滿足回文條件為止
                返回最長回文子串的起始和結束索引
                """
                len_s = len(in_s)
                while (left >= 0) and (right < len_s) and (in_s[left] == in_s[right]):
                    left = left - 1
                    right = right + 1
                return in_s[left + 1:right]

            for i in range(0, len(s)):
                # 以當前字符作為中心向兩側擴展
                sig1_str = aroundCenter(s, i, i)
                sig2_str = aroundCenter(s, i, i + 1)
                if len(sig1_str) > len(sig2_str):
                    sig_str = sig1_str
                else:
                    sig_str = sig2_str
                if len(sig_str) > len(sub_str):
                    sub_str = sig_str
            return sub_str

3、測試用例

    s=Solution()
    ts="babad"
    res=s.longestPalindrome(ts)
    print(res)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

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