lc580.验证回文字符串II

 

题目链接

这个很显然就是左右双指针啊,但是我一开始还想了一下碰到不同字符的时候该删除哪个,毕竟有可能没把该删的删了反而把另一边的删了,然后一看别人的,哦直接把两遍都各自删一下试试看取个或就行了啊。这个算法的时间复杂度是O(N),空间复杂度是O(N),不用s[::-1]的方式而是逐个遍历的话时间复杂度是O(1)。

class Solution:
    def validPalindrome(self, s: str) -> bool:

        def isPalindrome(string):
            return string == string[::-1]

        left, right = 0, len(s) - 1
        while left < right:
            if s[left] != s[right]:
                return isPalindrome(s[left+1:right+1]) or isPalindrome(s[left:right])
            left += 1
            right -= 1
        return True