每日一題:驗證迴文字符串

給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。

示例1:
輸入: “aba”
輸出: True

示例2:
輸入: “abca”
輸出: True
解釋: 你可以刪除c字符。

注意:
字符串只包含從 a-z 的小寫字母。字符串的最大長度是50000。

使用貪心算法。設置兩個指針分別指向字符串頭和字符串尾,向中間判斷是否是迴文。如果第一次出現不相等,因爲可以刪除一個字符,所以可以再次判斷[low+1, high]和[low, high - 1]這兩個區間是不是迴文字符串。

# 貪心算法
class Solution:
    def checkPalindrome(self, s: str, low: int, high: int) -> bool:
        i = low
        j = high
        while i <= j:
            if s[i] != s[j]:
                return False
            i += 1
            j -= 1
        
        return True

    def validPalindrome(self, s: str) -> bool:
        low = 0
        high = len(s) - 1

        while low <= high:
            if s[low] == s[high]:
                low += 1
                high -= 1
            else:
                return self.checkPalindrome(s, low + 1, high) or self.checkPalindrome(s, low, high - 1)
        
        return True
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章