Flip Game I

Problem Description:

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 two consecutive "++" 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 compute all possible states of the string after one valid move.

For example, given s = "++++", after one move, it may become one of the following states:

[
  "--++",
  "+--+",
  "++--"
]

If there is no valid move, return an empty list [].

 1     public List<String> generatePossibleNextMoves(String s) {
 2         List<String> list = new ArrayList<String>();
 3 
 4         if (s == null || s.length() < 2) return list;
 5 
 6         for (int i = -1; (i = s.indexOf("++", i + 1)) >= 0;) {
 7             list.add(s.substring(0, i) + "--" + s.substring(i + 2));
 8         }
 9         return list;
10     }
Flip Game II Problem Description:

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 two consecutive "++" 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.

For example, given s = "++++", return true. The starting player can guarantee a win by flipping the middle "++" to become "+--+".

Code is from: https://discuss.leetcode.com/topic/27287/short-java-ruby?show=64350

1     public boolean canWin(String s) {
2         for (int i=-1; (i = s.indexOf("++", i+1)) >= 0; )
3             if (!canWin(s.substring(0, i) + "-" + s.substring(i + 2))) return true;
4         return false;
5     }

 

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 two consecutive "++" 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.

For example, given s = "++++", return true. The starting player can guarantee a win by flipping the middle "++" to become "+--+".