294 Flip Game II
294. Flip Game II
1. Question
You are playing the following Flip Game with your friend: Given a string that contains only these two characters:+
and-
, you and your friend take turns to flip twoconsecutive"++"
into"--"
. The game ends when a person can no longer make a move and therefore the other person will be the winner.
Write a function to determine if the starting player can guarantee a win.
Example:
Input:
s = "++++"
Output:
true
Explanation:
The starting player can guarantee a win by flipping the middle "++" to become "+--+".
Follow up: Derive your algorithm's runtime complexity.
(1) Memoization
思路:
class Solution {
public boolean canWin(String s) {
if (s == null || s.length() <= 1) {
return false;
}
Map<String, Boolean> cache = new HashMap();
return canWin(s, cache);
}
public boolean canWin(String s, Map<String, Boolean> cache) {
if (cache.containsKey(s)) {
return cache.get(s);
}
for (int i = 0; i < s.length(); i++) {
if (s.startsWith("++", i)) {
String t = s.substring(0, i) + "--" + s.substring(i + 2);
if (!canWin(t, cache)) {
cache.put(s, true);
return true;
}
}
}
cache.put(s, false);
return false;
}
}
3. Time & Space Complexity
Memoization: 时间复杂度O(), 空间复杂度O()
Last updated
Was this helpful?