LeetCode问题680:验证回文字符串II

问题680:给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。

这道题用双指针,只需要的时间复杂度和的空间复杂度。定义左指针p1和右指针p2,初始位置分别为字符串的第一个和最后一个字符。

  • 如果p1p2指向的字符相同,则p1向右移动一位,p2向左移动一位;
  • 如果p1p2指向的字符不同,则在字符串sp1+1p2位(删除p1),以及p1p2-1位(删除p2)中,只要有一个是回文字符串,则返回True;否则返回False

完整代码:

class Solution:
    def validPalindrome(self, s: str) -> bool:
        def isPalindrome(s, left, right):
            while right > left:
                if s[left] != s[right]:
                    return False
                left += 1
                right -= 1
            return True
        #isPalindrome函数用双指针判断是否为回文字符串
        p1, p2 = 0, len(s)-1
        while p2 > p1:
            if s[p1] != s[p2]:
                return isPalindrome(s, p1+1, p2) or isPalindrome(s, p1, p2-1)
            else:
                p1 += 1
                p2 -= 1
        return True

运行结果:

你可能感兴趣的:(LeetCode问题680:验证回文字符串II)