784. Letter Case Permutation
题目
Given a string S
, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of all possible strings we could create.
Examples:
Input: S = "a1b2"
Output: ["a1b2", "a1B2", "A1b2", "A1B2"]
Input: S = "3z4"
Output: ["3z4", "3Z4"]
Input: S = "12345"
Output: ["12345"]
Note:
- S will be a string with length at most
12
. - S will consist only of letters or digits.
解决
利用递归解决此问题,递归的关键是先改变下一位,之后再改变这一位
【l为字符串的长度】
- 时间复杂度:O(l * l)
- 空间复杂度:O(l * l)
// Runtime: 8ms
class Solution {
public:
vector<string> letterCasePermutation(string S) {
vector<string> result;
// recursive solution
solve(S, 0, result);
return result;
}
void solve(string S, int index, vector<string> & result) {
int len = S.length();
if (index == len) {
// if the index is the end of the string S, we finish
result.push_back(S);
} else {
// deal with the next letter firstly
solve(S, index + 1, result);
// deal with this letter
if (S[index] >= 'a' && S[index] <= 'z') {
S[index] -= 32;
solve(S, index + 1, result);
} else if (S[index] >= 'A' && S[index] <= 'Z') {
S[index] += 32;
solve(S, index + 1, result);
}
}
}
};