给定一个非空字符串 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