-
Notifications
You must be signed in to change notification settings - Fork 192
/
Copy path680.py
27 lines (27 loc) · 902 Bytes
/
680.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
class Solution:
def validPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
memo = {}
def dfs(l, r, cnt):
if (l, r, cnt) in memo:
return memo[(l, r, cnt)]
if l >= r:
return True
elif s[l] != s[r]:
cnt += 1
if cnt > 1:
memo[(l, r, cnt)] = False
return False
elif (s[l + 1] == s[r] and dfs(l + 1, r, cnt + 1)) or (s[l] == s[r - 1] and dfs(l, r - 1, cnt + 1)):
memo[(l, r, cnt)] = True
return True
else:
memo[(l, r, cnt)] = False
return False
else:
memo[(l, r, cnt)] = dfs(l + 1, r - 1, cnt)
return memo[(l, r, cnt)]
return dfs(0, len(s) - 1, 0)