-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
Copy path680_Valid_Palindrome_II.py
30 lines (27 loc) · 1.09 KB
/
680_Valid_Palindrome_II.py
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
class Solution(object):
# def validPalindrome(self, s):
# """
# :type s: str
# :rtype: bool
# """
# def is_pali_range(i, j):
# return all(s[k] == s[j - k + i] for k in range(i, j))
# for i in xrange(len(s) / 2):
# if s[i] != s[~i]:
# j = len(s) - 1 - i
# return is_pali_range(i + 1, j) or is_pali_range(i, j - 1)
# return True
# Actually we can make this solution more general
def validPalindrome(self, s):
return self.validPalindromeHelper(s, 0, len(s) - 1, 1)
def validPalindromeHelper(self, s, left, right, budget):
# Note that budget can be more than 1
while left < len(s) and right >= 0 and left <= right and s[left] == s[right]:
left += 1
right -= 1
if left >= len(s) or right < 0 or left >= right:
return True
if budget == 0:
return False
budget -= 1
return self.validPalindromeHelper(s, left + 1, right, budget) or self.validPalindromeHelper(s, left, right - 1, budget)