মান লক্ষ্য করুন আমাদের কাছে একটি স্ট্রিং 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]কে"|"দিয়ে স্প্লিট করে প্রতিটিoptionএর জন্য:s[pos:start]কেseq-র শেষে ঢুকানoptionকে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) seq = [] res = [] 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() 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']
- যদি