leetcode——680.验证回文字符串2

做了好久哦,一个多小时了都,才纠正过来。

双指针!

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

 

你可能感兴趣的:(leetcode——680.验证回文字符串2)