Computer >> Máy Tính >  >> Lập trình >> C ++

Hoán vị chữ hoa trong C ++

Giả sử chúng ta có một chuỗi gồm các chữ cái và số. Chúng ta phải tạo ra tất cả các kết hợp có thể có của chuỗi đó bằng cách lấy các phiên bản viết hoa và viết thường của các chữ cái có trong chuỗi. Vì vậy, nếu một chuỗi chỉ có các số, chỉ số đó sẽ được trả về. Giả sử chuỗi giống như “1ab2”, thì các chuỗi sẽ là [“1ab2”, “1Ab2”, “1aB2”, “1AB2”]

Để giải quyết vấn đề này, chúng ta sẽ sử dụng cách tiếp cận đệ quy. Nó nhận tham số chỉ mục để bắt đầu công việc từ chỉ mục đó. Nó cũng cần một chuỗi tạm thời để tạo kết quả. Khi chỉ số bằng với độ dài chuỗi, sau đó trả về chuỗi tạm thời. Đối với chỉ mục đã cho, nếu đó là chữ thường, hãy chuyển nó thành chữ hoa và ngược lại, sau đó thực hiện tác vụ một cách đệ quy.

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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 {
   public:
   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);
      }
   }
   vector<string> letterCasePermutation(string S) {
      res.clear();
      solve(S);
      return res;
   }
};
main(){
   Solution ob;
   print_vector(ob.letterCasePermutation("1ab2"));
   print_vector(ob.letterCasePermutation("9876"));
}

Đầu vào

"1ab2"
"9876"

Đầu ra

[1ab2, 1aB2, 1Ab2, 1AB2, ]
[9876, ]