680. 验证回文字符串 Ⅱ

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
注意:
字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

示例 1:
输入: "aba"
输出: True

示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。

注意: 1. 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。



思路:
双指针:i从下标0往后、j从下标len(s)-1往前;
当不匹配时,将i或j向前移动一步,再进行匹配;
关键:不匹配时先移动哪个指针。
 1 class Solution(object):
 2     def validPalindrome(self, s):
 3         """
 4         :type s: str
 5         :rtype: bool
 6         """
 7         # 设置双指针
 8         i, j = 0, len(s) - 1
 9         # 设置标记——确保最多删除一个字符
10         flag = True
11         while i < j:
12             if s[i] != s[j]:
13                 # 若遇到不回文,先判断标记:若为true说明之前没有遇到过不回文
14                 if not flag:
15                     return False
16                 # 若i移动之后回文
17                 if s[i+1:j][::-1] == s[i+1:j]:
18                     i += 1
19                     # 调整过指针后要将标记置否
20                     flag = False
21                 # 若j移动之后回文
22                 elif s[i:j-1][::-1] == s[i:j-1]:
23                     j -= 1
24                     # 调整过指针后要将标记置否
25                     flag = False
26                 else:
27                     return False
28             # 回文则正常移动指针
29             else:
30                 i += 1
31                 j -= 1
32         return True
33 
34 if __name__ == '__main__':
35     solution = Solution()
36     print(solution.validPalindrome("eeccccbebaeeabebccceea"))
 
 
 
原文地址:https://www.cnblogs.com/panweiwei/p/12697674.html