-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path294 Flip Game II.py
46 lines (37 loc) · 1.04 KB
/
294 Flip Game 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""
Premium Question
Game, Winner, Backtracking
Author: Rajeev Ranjan
"""
class Solution(object):
def __init__(self):
self.d = {}
def canWin(self, s):
"""
memoization
110ms
"""
if s not in self.d:
flag = False
for i in xrange(len(s)-1):
if s[i:i+2] == "++":
if not self.canWin(s[:i]+"--"+s[i+2:]):
flag = True
break
self.d[s] = flag
return self.d[s]
def canWin_oneline(self, s):
return any(not self.canWin_oneline(s[:i]+"--"+s[i+2:]) for i in xrange(len(s)-1) if s[i:i+2] == "++")
def canWin_trivial(self, s):
"""
3200 ms
:type s: str
:rtype: bool
"""
for i in xrange(len(s)-1):
if s[i:i+2] == "++":
if not self.canWin_trivial(s[:i]+"--"+s[i+2:]):
return True
return False
if __name__ == "__main__":
assert Solution().canWin("+++++") == False