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 []
.
class Solution
{
public:
list<string> getFlipResult(string s1)
{
list<string> res;
if (s1.length() < 2)
{
return res;
}
dfs(s1,res,0);
return res;
}
void dfs(string s1, list<string> &res, int len)
{
for (int i = len; i < s1.length()-1; i++)
{
if (s1[i] == '+'&&s1[i + 1] == '+')
{
string t1 = s1.substr(0, i) + "--" + s1.substr(i+2);
res.push_back(t1);
}
else
{
dfs(s1,res,i+1);
}
}
}
};