题目描述
给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
示例
示例 1:
输入: s = “aba”
输出: true
示例 2:
输入: s = “abca”
输出: true
解释: 可以删除 “c” 字符 或者 “b” 字符
示例 3:
输入: s = “abc”
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/RQku0D
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法
左右指针法:
- 首先,当当前位置left和right位置字符相同时,同时移动,当不相同时,需要做出两种判断:第一种:left+1和right范围的子字符串是否为回文串,和,left和right+1范围的子字符串是否为回文串。两者满足其一便返回True。
- 最后,字符串本身为回文串,返回True。
class Solution:
def validPalindrome(self, s: str) -> bool:
left, right = 0, len(s) - 1
def isprime(i, j):
while i < j:
if s[i] != s[j]:
return False
i += 1
j -= 1
return True
while left < right:
if s[left] == s[right]:
left, right = left + 1, right - 1
else:
return isprime(left+1, right) or isprime(left, right-1)
return True