ধরুন আমাদের একটি স্ট্রিং S আছে যা শব্দের একটি তালিকা উপস্থাপন করে। এখানে শব্দের প্রতিটি অক্ষরে 1 বা তার বেশি বিকল্প রয়েছে। যদি শুধুমাত্র একটি বিকল্প থাকে, তাহলে অক্ষরটি উপস্থাপন করা হয়। যদি একাধিক বিকল্প থাকে, তাহলে কোঁকড়া ধনুর্বন্ধনী বিকল্পগুলিকে সীমাবদ্ধ করে। সুতরাং উদাহরণস্বরূপ, "{a,b,c}" বিকল্পগুলি উপস্থাপন করবে ["a", "b", "c"]। এখন উদাহরণ স্বরূপ, যদি ইনপুট "{a,b,c}d{e,f}" এর মত হয় তবে এটি ["ade", "adf", "bde", "bdf", "cde" এর প্রতিনিধিত্ব করবে। "cdf"]।
আভিধানিক ক্রমে, এই পদ্ধতিতে গঠিত হতে পারে এমন সমস্ত শব্দ ফেরত দিন।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ret নামক একটি অ্যারে সংজ্ঞায়িত করুন, একটি পূর্ণসংখ্যা টাইপ ভেরিয়েবল n
সংজ্ঞায়িত করুন -
একটি পদ্ধতি সংজ্ঞায়িত করুন সমাধান(), এটি ইনপুট হিসাবে সূচক, তালিকা এবং curr গ্রহণ করবে
-
যদি index =n হয়, তাহলে ret এ curr ঢোকান এবং রিটার্ন করুন
-
আমি তালিকার আকার 0 থেকে সীমার জন্য [সূচী]
-
কল সমাধান (সূচী + 1, তালিকা, curr + তালিকা[সূচি, i])
-
-
মূল পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন
-
100 আকারের একটি তালিকা তৈরি করুন, n :=0, পতাকা :=মিথ্যা
সেট করুন -
0 থেকে s - 1
এর আকারের মধ্যে i এর জন্য-
যদি s[i] কমা হয়, তাহলে পরবর্তী পুনরাবৃত্তিতে চলে যান
-
অন্যথায় যখন s[i] বন্ধনী খুলছে, তখন পতাকা সেট করুন :=true
-
অন্যথায় যখন s[i] বন্ধনী বন্ধ হয়, তখন পতাকা সেট করুন :=মিথ্যা এবং n 1 দ্বারা বাড়ান
-
অন্যথায় s[i] দ্বারা তালিকা[n] বাড়ান, এখন যদি পতাকা মিথ্যা হয়, তাহলে n 1 দ্বারা বাড়ান
-
-
কল সমাধান (0, তালিকা, খালি স্ট্রিং)
-
রেট অ্যারে সাজান
-
রিটার্ন রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
vector <string> ret;
int n;
vector<string> expand(string s) {
vector <string> list(100);
n = 0;
int flag = false;
for(int i = 0; i < s.size(); i++){
if(s[i] == ','){
continue;
}else if(s[i] == '{'){
flag = true;
}else if(s[i] == '}'){
flag = false;
n++;
}else{
list[n] += s[i];
if(!flag)n++;
}
}
solve(0, list);
sort(ret.begin(), ret.end());
return ret;
}
void solve(int idx, vector <string> list, string curr = ""){
if(idx == n){
ret.push_back(curr);
return;
}
for(int i = 0; i < list[idx].size(); i++){
solve(idx + 1, list, curr + list[idx][i]);
}
}
};
main(){
Solution ob;
print_vector(ob.expand("{a,b}c{d,e}f"));
} ইনপুট
"{a,b}c{d,e}f" আউটপুট
[acdf, acef, bcdf, bcef, ]