Cho chuỗi chứa chữ và số. Sinh tất cả chuỗi bằng cách đổi chữ hoa/thường cho các chữ cái.
Input: "1ab2" Output: ["1ab2", "1Ab2", "1aB2", "1AB2"]
Giải pháp: Đệ quy. Tại mỗi chữ cái, nhánh 1: giữ nguyên, nhánh 2: đổi case. Số thì giữ nguyên.
Chương trình minh họa
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<string> v){
cout << "[";
for(int i = 0; i < v.size(); i++) cout << v[i] << ", ";
cout << "]" << endl;
}
class Solution {
vector<string> res;
void solve(string s, int idx = 0, string temp = ""){
if(idx == s.size()){
res.push_back(temp); return;
}
solve(s, idx + 1, temp + s[idx]);
int diff = 'a' - 'A';
if(s[idx] >= 'a' && s[idx] <= 'z'){
char x = s[idx] - diff;
solve(s, idx + 1, temp + x);
} else if(s[idx] >= 'A' && s[idx] <= 'Z'){
char x = s[idx] + diff;
solve(s, idx + 1, temp + x);
}
}
public:
vector<string> letterCasePermutation(string S){
res.clear(); solve(S); return res;
}
};
int main(){
Solution ob;
print_vector(ob.letterCasePermutation("1ab2"));
print_vector(ob.letterCasePermutation("9876"));
return 0;
}
Kết quả
[1ab2, 1aB2, 1Ab2, 1AB2, ] [9876, ]