1. 程式人生 > 實用技巧 >LeetCode-680-驗證迴文字串 Ⅱ

LeetCode-680-驗證迴文字串 Ⅱ

給定一個非空字串 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