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