কম্পিউটার

C++ এ লেটার কেস পারমুটেশন


ধরুন আমাদের অক্ষর এবং সংখ্যা সহ একটি স্ট্রিং আছে। স্ট্রিংটিতে উপস্থিত অক্ষরগুলির বড় হাতের এবং ছোট হাতের সংস্করণগুলি নিয়ে আমাদের সেই স্ট্রিংয়ের সম্ভাব্য সমস্ত সংমিশ্রণ তৈরি করতে হবে। তাই যদি একটি স্ট্রিং শুধুমাত্র সংখ্যা আছে, শুধুমাত্র যে ফেরত হবে. ধরুন স্ট্রিংটি “1ab2” এর মত, তাহলে স্ট্রিংগুলো হবে [“1ab2”, “1Ab2”, “1aB2”, “1AB2”]

এই সমস্যাটি সমাধান করার জন্য, আমরা পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করব। সেই সূচক থেকে কাজ শুরু করতে সূচক প্যারামিটার লাগে। এটি একটি টেম্প স্ট্রিংও নেয় যেখানে ফলাফল তৈরি হয়। যখন সূচকটি স্ট্রিং দৈর্ঘ্যের সমান হয়, তখন টেম্প স্ট্রিংটি ফেরত দিন। প্রদত্ত সূচকের জন্য, যদি এটি ছোট হাতের অক্ষর হয়, এটিকে বড় হাতের অক্ষর করুন এবং এর বিপরীতে করুন, তারপর পুনরাবৃত্তিমূলকভাবে কাজটি করুন৷

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#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"));
}

ইনপুট

"1ab2"
"9876"

আউটপুট

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

  1. C++ এ একটি স্ট্রিং টোকেনাইজ করা

  2. কিভাবে std::string কে C++ এ লোয়ার কেসে রূপান্তর করবেন?

  3. একটি C++ স্ট্রিংকে আপার কেসে রূপান্তর করুন

  4. C++ এ একটি স্ট্রিংকে টোকেনাইজ করবেন?