你和你的朋友正在玩一个翻转游戏:给定一个只包含'+'和'-'的字符串,你和你的朋友轮流进行以下操作:翻转两个连续的'+',使得”++”变成”—”。无法进行操作的一方为输。那么给出一个字符串,假设你先进行操作,你是否一定会赢呢?
Example:
s = "-++++-"
返回true,表示你一定会赢。只需翻转第二个和第三个加号使得
s = "-+--+-"
此时对方无法继续操作(没有两个连续的加号)。
class Sollution{
//search
public boolean canWin(String str){
int n = str.length();
boolean[] ops = new boolean[n];
for(int i=0; i<n; i++){
ops[i] = (str.charAt(i)=='+');
}
return search(ops);
}
boolean search(boolean ops[]){
for(int i=0; i<ops.length-1; i++){
if(ops[i]&&ops[i+1]){
ops[i]=false;
ops[i+1]=false;
//如果他的下一个人没有选的了,则先手就赢了
if(!search(ops))
return true;
ops[i]=true;
ops[i+1]=true;
}
}
return false;
}
//nim 博弈
//TODO
}