কম্পিউটার টিউটোরিয়াল

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


মান করুন আমাদের কাছে অক্ষর ও সংখ্যা মিশ্রিত একটি স্ট্রিং আছে। আমাদের স্ট্রিংয়ের উপস্থিত অক্ষরগুলোর আপারকেস এবং লোয়ারকেস ভার্সন लेकर স্ট্রিংয়ের সব সম্ভাব্য কম্বিনেশন জেনারেট করতে হবে। যদি স্ট্রিংয়ে শুধু সংখ্যা থাকে, তবে শুধু সেটি রিটার্ন হবে। যেন স্ট্রিং "1ab2" হলে, স্ট্রিংগুলো হবে ["1ab2", "1Ab2", "1aB2", "1AB2"]।

এই সমস্যাটি সমাধান করতে, আমরা রিকার্শিভ পদ্ধতি ব্যবহার করব। এটিতে একটি ইন্ডেক্স প্যারামিটার থাকে যা নির্দেশ করে কোন ইনডেক্স থেকে কাজ শুরু করতে হবে। এটিতে একটি টেম্প স্ট্রিংও থাকে যেখানে পর্যন্ত রেজাল্ট তৈরি হয়েছে। যখন ইন্ডেক্স স্ট্রিং দৈর্ঘ্যের সমান হয়, তবে টেম্প স্ট্রিং রিটার্ন করুন। দেওয়া ইন্ডেক্সের জন্য, যদি সেটি লোয়ারকেস লেটার হয়, তবে আপারকেসে কনভার্ট করুন এবং بالعکس, তারপর রিকার্শিভলি কাজটি করুন।

C++ উদাহরণ

#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++-এ স্ট্রিং টোকেনাইজেশন: স্ট্রিম এবং getline() ব্যবহার

  2. C++-এ std::string কে lowercase-এ কনভার্ট করা: transform() ফাংশন

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

  4. C++-এ স্ট্রিং টোকেনাইজ (Tokenize) করা