मान लीजिए कि हमारे पास अक्षरों और संख्याओं के साथ एक स्ट्रिंग है। हमें स्ट्रिंग में मौजूद अक्षरों के अपरकेस और लोअरकेस संस्करणों को लेकर उस स्ट्रिंग के सभी संभावित संयोजनों को उत्पन्न करना होगा। तो अगर एक स्ट्रिंग में केवल संख्याएं हैं, तो केवल वही वापस किया जाएगा। मान लीजिए कि स्ट्रिंग "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, ]