680. 验证回文串 II
已解答
简单
相关标签
相关企业
给你一个字符串 s
,最多 可以从中删除一个字符。
请你判断 s
是否能成为回文字符串:如果能,返回 true
;否则,返回 false
。
示例 1:
输入:s = "aba" 输出:true
示例 2:
输入:s = "abca" 输出:true 解释:你可以删除字符 'c' 。
示例 3:
输入:s = "abc" 输出:false
提示:
1 <= s.length <= 105
s
由小写英文字母组成
-
首先检查整个字符串
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]