溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

leetcode 5:最長回文子串

發(fā)布時(shí)間:2020-07-09 07:15:32 來源:網(wǎng)絡(luò) 閱讀:280 作者:Jayce_SYSU 欄目:編程語言

題目描述

Given a string s, find the longest palindromic substring in s.
You may assume that the maximum length of s is 1000.

Example 1:

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example 2:

Input: "cbbd"
Output: "bb"
# -*- coding: utf-8 -*-
# @Time         : 2019-10-11 10:34
# @Author       : Jayce Wong
# @ProjectName  : job
# @FileName     : longestPalindromicSubstring.py
# @Blog         : https://blog.51cto.com/jayce1111
# @Github       : https://github.com/SysuJayce

class Solution:
    """
    要查找最長的回文子串,這里可以把我們的思路換一下。
    原本我們判斷一個(gè)字符串是不是回文的時(shí)候,是從字符串的兩端開始往中間比較,
    而我們現(xiàn)在要找的是最長的回文子串,那么如果我們從中間開始往兩段比較,直到待比較的兩個(gè)字符不相等。

    通過不斷的將中心字符移動(dòng),這樣我們就可以找到最長的回文子串。
    需要注意的是,在我們判斷一個(gè)字符串的是不是回文的時(shí)候需要處理字符串個(gè)數(shù)的奇偶性
    同理,我們?cè)谝苿?dòng)中心字符的時(shí)候,也要處理奇數(shù)字符長度的回文子串和偶數(shù)字符長度的回文子串。
    """
    def longestPalindrome(self, s):
        def helper(left, right):
            """
            判斷給定一個(gè)字符串的起止點(diǎn),最多能將其延長到多長。
            :param left: 起點(diǎn)
            :param right: 終點(diǎn)
            :return: 以left, right為起止點(diǎn)能延長到的最長回文字符串
            """
            # 只要下標(biāo)不越界并且兩端相等,就往外延伸
            while left >= 0 and right < len(s) and s[left] == s[right]:
                left -= 1
                right += 1
            # 當(dāng)不能再延伸的時(shí)候,返回當(dāng)前能得到的最長回文字符串
            return s[left + 1: right]

        ans = ''
        for i in range(len(s)):
            # 對(duì)于每一個(gè)中心,需要判斷奇數(shù)長度的回文子串和偶數(shù)長度的回文子串
            odd = helper(i, i)
            if len(odd) > len(ans):
                ans = odd
            even = helper(i, i + 1)
            if len(even) > len(ans):
                ans = even
        return ans

def main():
    solution = Solution()
    s = "babad"
    print(solution.longestPalindrome(s))

if __name__ == '__main__':
    main()
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI