680.验证回文字符串(2)
题目
给定一个非空字符串s
,最多删除一个字符,判断是否能成为回文字符串
示例:
输入:“aba”
输出:True
输入: "abca"
输出: True
解释:你可以删除c字符
我一开始给那个删除的位置搞懵了,就不会写了,只写成这个样子
class Solution:
def validPalindrome(self, s: str) -> bool:
if(len(s)<2):return True
start,end=0,len(s)
while(start<end):
if len(s)%2!=0:
if(s[start]==s[end]):
start+=1
end-=1
continue
if(s[start]!=s[end]):
del s[end]
continue
后来看了答案恍然大悟,删除不是真的删除,我还傻傻地分了字符长度是奇数还是偶数。
其实思路是如果匹配了,两个指针同时移动,如果不匹配,就用个or来走,就start指针往后移动试试,或者end指针往前移动试试,这样子
class Solution:
def validPalindrome(self, s: str) -> bool:
if len(s)<2:return True
def isPalindrome(s,start,end):
while start<end:
if s[start]==s[end]:
start+=1
end-=1
continue
else:
return False
return True
start,end=0,len(s)-1
while start<end:
if s[start]==s[end]:
start+=1
end-=1
continue
else:
return isPalindrome(s,start+1,end) or isPalindrome(s,start,end-1)
return True
测试用例
def isPalindrome(s,start,end):
while(start<end):
if s[start]==s[end]:
start+=1
end-=1
continue
else:
return False
return True
def validPalindrome(s):
if(len(s)<2):return True
start,end=0,len(s)-1
while(start<end):
if s[start]==s[end]:
start+=1
end-=1
continue
else:
return isPalindrome(s,start+1,end) or isPalindrome(s,start,end-1)
return True
s="aba"
print(validPalindrome(s))