给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
注意:
回文字符串定义就是正着和反着读一样。
遇到的难点:
删除一个字符,可以从左边删也可以从右边删,只要有一个方向满足要求,此字符串即为回文字符串。所以需要两种情况一起考虑!!
def validPalindrome(s):#回文字符串定义就是正着和反着读一样
#s[::-1]倒序遍历s
#注意使用[]切片,左包右不包
if s == s[::-1]:
return True
l,r = 0,len(s)-1
while l<r:
if s[l]==s[r]:
l,r = l+1,r-1
else:#有两种情况,从左边删除一个字符or从右边删除一个字符
a = s[l+1:r+1]#从左边删除一个字符-----l+1,r
b = s[l:r]#从右边删除一个字符------l,r-1
return a==a[::-1] or b==b[::-1]