LeetCode-680-驗證迴文字元串 Ⅱ

  • 2020 年 11 月 15 日
  • 筆記

給定一個非空字元串 s,最多刪除一個字元。判斷是否能成為迴文字元串。
image.png

解題思路:
判斷是否迴文字元串:isPalindrome = lambda x: x==x[::-1],即將字元串x倒置,還和原來的一樣;
如何判斷刪除一個字元後還是迴文字元串?假設字元串s=’abccbca’,當用雙指針從兩端向中間遊走,如果兩指針所指字元不相等,考慮刪除其中之一,再判斷是否迴文字元串。
該例中當left=1和right=5時,刪除其中之一再判斷,只需判斷left和right之間的字元串是否迴文,生成的新的兩個字元串分別為刪除右邊字元:s[left:right],刪除左邊字元:s[left+1:right+1]。
Python3程式碼:

class Solution:
def validPalindrome(self, s: str) -> bool:
left = 0
right = len(s)-1
isPalindrome = lambda x : x == x[::-1]

    while left<=right:
        if s[left] != s[right]:
            return isPalindrome(s[left:right]) or isPalindrome(s[left+1:right+1])
        else:
            left+=1
            right-=1
    return True