给定一个字符串S
,通过将字符串S
中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。
示例: 输入: S = "a1b2" 输出: ["a1b2", "a1B2", "A1b2", "A1B2"] 输入: S = "3z4" 输出: ["3z4", "3Z4"] 输入: S = "12345" 输出: ["12345"]
注意:
S
的长度不超过12
。S
仅由数字和字母组成。
在真实的面试中遇到过这道题?
这是一个经典的递归题目,注意这里的实现方式
class Solution {
public:
void dfs(string S, vector<string>& res,int start)
{
int n = S.size();
if(start==n)
{
res.push_back(S);
return;
}
dfs(S,res,start+1); // 选择一,当前字母不变
// 下面两个是选择二,改变
if(islower(S[start]))
{
S[start]=toupper(S[start]);
dfs(S,res,start+1);
}
else if(isupper(S[start]))
{
S[start]=tolower(S[start]);
dfs(S,res,start+1);
}
}
vector<string> letterCasePermutation(string S)
{
vector<string> res;
dfs(S,res,0);
return res;
}
};