680. 验证回文串 II
已解答
简单
相关标签
相关企业
给你一个字符串 s,最多 可以从中删除一个字符。
请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。
示例 1:
输入:s = "aba" 输出:true
示例 2:
输入:s = "abca" 输出:true 解释:你可以删除字符 'c' 。
示例 3:
输入:s = "abc" 输出:false
提示:
1 <= s.length <= 105s由小写英文字母组成
-
首先检查整个字符串
s是否本身就是回文字符串,如果是,则直接返回True。- 使用
s == s[::-1]来判断字符串是否为回文,s[::-1]会将字符串反转。
- 使用
-
如果字符串不是回文,则使用双指针法从两端向中间遍历字符串。
i从字符串的开头开始,j从字符串的末尾开始。- 当
i < j时,进行循环:- 如果
s[i]和s[j]相等,说明当前字符匹配,将指针i向后移动一位(i += 1),指针j向前移动一位(j -= 1)。 - 如果
s[i]和s[j]不相等,说明可能需要删除一个字符来使字符串成为回文。此时,考虑两种情况:- 删除
s[i],保留s[i + 1:j + 1],并判断这个子字符串是否是回文。 - 删除
s[j],保留s[i:j],并判断这个子字符串是否是回文。
- 删除
- 如果
class Solution(object):
def validPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
if s==s[::-1]:
return True
i=0
j=len(s)-1
while i<j:
if s[i]==s[j]:
i+=1
j-=1
else:
a=s[i:j]
b=s[i+1:j+1]
return a==a[::-1] or b==b[::-1]



















