1. 题目
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: s = "aba"
输出: true
示例 2:
输入: s = "abca"
输出: true
解释: 你可以删除c字符。
示例 3:
输入: s = "abc"
输出: false
提示:
1 <= s.length <= 105
2. 题解
class Solution:
def validPalindrome(self, s: str) -> bool:
n = len(s)
left = 0
right = n - 1
while left < right:
if s[left] != s[right]:
return self.is_palindrome(s, left, n) or self.is_palindrome(s, right, n)
left += 1
right -= 1
return True
def is_palindrome(self, s: str, i: int, n: int) -> bool:
left = 0
right = n - 1
while left < right:
if left == i:
left += 1
elif right == i:
right -= 1
if s[left] != s[right]:
return False
left += 1
right -= 1
return True