मान लीजिए हमारे पास एक स्ट्रिंग s है जिसमें लोअरकेस अल्फाबेट वर्ण और अन्य वर्ण जैसे "[", "|", और "]" शामिल हैं। यहां "[a|b|c]" इंगित करता है कि "a", "b", या "c" में से किसी एक को एक संभावना के रूप में चुना जा सकता है। हमें उन सभी संभावित मानों की सूची ढूंढनी है जिन्हें s दर्शा सकता है। यहां "[]" नेस्टेड नहीं हो सकते और इनमें विकल्पों की कोई भी संख्या हो सकती है।
उदाहरण के लिए, यदि इनपुट s = "[d|t|l]im[e|s]" है, तो आउटपुट होगा ['dime', 'dims', 'lime', 'lims', 'time', 'tims']।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- यदि
sखाली है, तो खाली स्ट्रिंग वाली सूची लौटाएं। n := sका आकारseq :=एक नई सूची,res :=एक नई सूची- एक फंक्शन
helper()परिभाषित करें जोposलेता है:- यदि
pos,nके समान है, तोseqमें मौजूद प्रत्येक तत्व को जोड़करresमें डालें
- अन्यथा,
- यदि
s[pos:]सबस्ट्रिंग में"["है, तोstart := pos + s[pos:].index("[")end := pos + s[pos:].index("]")s[start+1:end]को"|"से विभाजित करके प्रत्येक विकल्प के लिए:s[pos:start]कोseqके अंत में डालें- विकल्प को
seqके अंत में डालें helper(end + 1)कॉल करेंseqसे अंतिम दो तत्व हटाएं
- अन्यथा,
s[pos:]कोseqके अंत में डालेंhelper(n)कॉल करेंseqसे अंतिम तत्व हटाएं
- यदि
- यदि
- मुख्य मेथड से:
helper(0)कॉल करेंresको सॉर्ट क्रम में लौटाएं
उदाहरण कोड
class Solution:
def solve(self, s):
if not s:
return [""]
n = len(s)
def helper(pos):
if pos == n:
res.append("".join(seq))
else:
if "[" in s[pos:]:
start = pos + s[pos:].index("[")
end = pos + s[pos:].index("]")
for option in s[start + 1 : end].split("|"):
seq.append(s[pos:start])
seq.append(option)
helper(end + 1)
seq.pop()
seq.pop()
else:
seq.append(s[pos:])
helper(n)
seq.pop()
seq = []
res = []
helper(0)
return sorted(res)
ob = Solution()
s = "[d|t|l]im[e|s]"
print(ob.solve(s))इनपुट
"[d|t|l]im[e|s]"
आउटपुट
['dime', 'dims', 'lime', 'lims', 'time', 'tims']