解题思路
定义双指针,将两个指针分别指向字符串的首尾,我们需要删除左指针指向的字符或者右指针指向的字符,然后再判断剩下的字符串是否构成回文字符串。
验证回文串我使用了将字符串反转过来再判断反转前后是否相等的方式。
![](…/images/屏幕快照 2021-07-24 下午1.01.17.png)
反转问题解决了,怎么解决指针问题?
以abca
为例,当遇到元素不等的情况时,删除b
或者删除c
都可以构成回文字符串
在判断的时候只需将这两种情况都考虑进去,只要其中一条满足那就构成回文字符串了
代码
class Solution:
def validPalindrome(self, s: str) -> bool:
isPalindrome = lambda x : x == x[::-1]
left, right = 0, len(s) - 1
while left <= right:
if s[left] == s[right]:
left += 1
right -= 1
else:
return isPalindrome(s[left+1 : right+1]) or isPalindrome(s[left : right])
return True