题目:给定一个字符串,在最多删除一个字符的情况下,判断这个字符串是不是回文字符串。
思路:回文字符串,第一想到的就是使用两个指针,前后各一个,当遇到前后字符不一致的时候,有两种情况,删除前面字符或者删除后面字符。由于删除一个字符后剩下的仍旧是字符串,可以直接递归处理了。然后用一个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)