[LeetCode][Medium]Longest Palindromic Substring

1604 ワード

質問する

  • 最長のファリンドロン
  • を探しています

    に答える

  • 文字数が1文字またはすべてパリンドロン
    文字列を元に戻します.
  • # return s when it is a palindrome itself.
            if len(s)<2 or s==s[::-1]:
                return s
  • 両指針を利用して、ファリン症候群であれば、左右に拡大することができます.
  • # find palindrome and expand right and left
            def expand(left: int, right: int) -> str:
                while left >= 0 and right < len(s) and s[left] == s[right]:
                    left += 1
                    right -= 1
                    return s[left+1:right]
  • 法林症候群は2つのモードに分けることができる.
  • (1)AA偶数個まで拡張
    (2)aba奇数個まで拡張
    そこで、2つのポインタをスライドウィンドウのように左から右に移動し、最大値を探します.
    class Solution:
        def longestPalindrome(self, s: str) -> str:
            
            
            # return s when it is a palindrome itself.
            if len(s) < 2 or s == s[::-1]:
                return s
            
            # ind palindrome and expand right and left
            def expand(left: int, right: int) -> str:
                while left >= 0 and right < len(s) and s[left] == s[right]:
                    left -= 1
                    right += 1
                return s[left + 1:right]
    
    
            result = ''
            # find longest palindromic substring
            for i in range(len(s) - 1):
                result = max(result,
                             expand(i, i + 1),
                             expand(i, i + 2),
                             key=len)
            return result