Contents

lc680. Valid Palindrome II

Given a string s, return true if the s can be palindrome after deleting at most one character from it.

Example 1:

1
2
Input: s = "aba"
Output: true

Example 2:

1
2
3
Input: s = "abca"
Output: true
Explanation: You could delete the character 'c'.

Example 3:

1
2
Input: s = "abc"
Output: false

Constraints:

  • 1 <= s.length <= 105
  • s consists of lowercase English letters.
解题思路:

如果最多删除一个字母可以使字符串满足回文序列即返回true。

我们可以从字符串两端开始依次比较,如果遇到不同,我们有一次机会删除其中一个字母继续比较,一个简单的while循环就可以完成任务。

代码:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution(object):
    def validPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        
        def isPalindrome(_s):
            _left=0
            _right=len(_s)-1
            while _left<_right:
                if _s[_left]!=_s[_right]:
                    return False
                else:
                    _left+=1
                    _right-=1
            return True

        delcount=0
        left=0
        right=len(s)-1
        while left<right:
            if s[left]==s[right]:
                left+=1
                right-=1
            else:
                if delcount==0:
                    delcount+=1
                    if isPalindrome(s[left+1:right+1])==True:
                        left+=1
                    elif isPalindrome(s[left:right])==True:
                        right-=1
                    else:
                        return False
                else:
                    return False
        return True
性能:

执行用时:140 ms, 在所有 Python 提交中击败了17.65%的用户

内存消耗:13.6 MB, 在所有 Python 提交中击败了47.06%的用户