Python 解LeetCode:680. Valid Palindrome II

        题目:给定一个字符串,在最多删除一个字符的情况下,判断这个字符串是不是回文字符串。

       思路:回文字符串,第一想到的就是使用两个指针,前后各一个,当遇到前后字符不一致的时候,有两种情况,删除前面字符或者删除后面字符。由于删除一个字符后剩下的仍旧是字符串,可以直接递归处理了。然后用一个flag,当达到2时,就可以递归结束了。

      代码如下:

 1 class Solution(object):
 2 
 3     def isPalindrome(self, s, left, right, flag):
 4         while left < right:
 5             if s[left] == s[right]:
 6                 left += 1
 7                 right -= 1
 8             else:
 9                 if flag == 1:
10                     return False
11                 flag = 1
12                 return (self.isPalindrome(s, left+1, right, flag) or
13                         self.isPalindrome(s, left, right-1, flag))
14         return True
15 
16     def validPalindrome(self, s):
17         """
18         :type s: str
19         :rtype: bool
20         """
21         return self.isPalindrome(s, 0, len(s)-1, 0)

 

posted @ 2017-10-23 16:49  潇湘旧友  阅读(1190)  评论(0编辑  收藏  举报