做了好久哦,一个多小时了都,才纠正过来。
双指针!
class Solution: def validPalindrome(self, s: str) -> bool: if s==s[::-1] : return True i,j=0,len(s)-1 while i<j: if s[i]!=s[j]: t=s[:i]+s[i+1:] if t!=t[::-1]: q=s[:j]+s[j+1:] if q!=q[::-1]: return False else: return True else: return True else: i+=1 j-=1
执行用时 :96 ms, 在所有 Python3 提交中击败了85.58%的用户
内存消耗 :14.1 MB, 在所有 Python3 提交中击败了5.22%的用户
看看人家60ms的范例:
思路一样,但是就是比我简洁快捷明了:
class Solution: def validPalindrome(self, s: str) -> bool: if s == s[::-1]: return True q = s[::-1] for i in range(len(s)): if s[i]!= q[i]: if s[:len(s)-i-1]+s[len(s)-i:] == q[:i]+q[i+1:] or q[:len(s)-i-1]+q[len(s)-i:] == s[:i]+s[i+1:]: return True else: return False
人家先将s的倒序存为q:
q = s[::-1]
然后比较,将两个判断语句写在一起:
if s[:len(s)-i-1]+s[len(s)-i:] == q[:i]+q[i+1:] or q[:len(s)-i-1]+q[len(s)-i:] == s[:i]+s[i+1:]:
就这样完成了。
人家64ms的范例思路也很巧妙:
class Solution: def validPalindrome(self, 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: a = s[l + 1 : r + 1] b = s[l:r] return a == a[::-1] or b==b[::-1]
真棒!!!
——2019.10.9