Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hoán vị chữ hoa/chữ thường (Letter Case Permutation) trong C++


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, ]