描述
翻转游戏:给定一个只包含两种字符的字符串:+
和-
,你和你的小伙伴轮流翻转"++"
变成"--"
。当一个人无法采取行动时游戏结束,另一个人将是赢家。
编写一个函数,计算字符串在一次有效移动后的所有可能状态。
您在真实的面试中是否遇到过这个题?
是
样例
给定 s = "++++"
, 在一次有效移动后,它会变成下列状态之一:
[
"--++",
"+--+",
"++--"
]
如果无法移动,则返回一个空列表[]
.
其实我有点懵没明白这道题目的用意何在,但我还是按照它的要求写了程序:
class Solution { public: /** * @param s: the given string * @return: all the possible states of the string after one valid move */ vector<string> generatePossibleNextMoves(string &s) { // write your code here vector<string> result; if(s.length()<2) return result; for(int i=0;i<s.length()-1;i++){ if(s[i]=='+'&&s[i+1]=='+'){ string tmp=s; tmp[i]='-'; tmp[i+1]='-'; result.push_back(tmp); } } return result; } };用tmp比较麻烦可以使用substr注意它的区间表示从第一个参数开始 第二个参数的长度。
class Solution { public: /** * @param s: the given string * @return: all the possible states of the string after one valid move */ vector<string> generatePossibleNextMoves(string &s) { // write your code here vector<string> result; if(s.length()<2) return result; for(int i=0;i<s.length()-1;i++){ if(s[i]=='+'&&s[i+1]=='+'){ result.push_back(s.substr(0, i) + "--" + s.substr(i + 2)); } } return result; } };