Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में विकल्पों का चयन करके सभी संभावित स्ट्रिंग्स उत्पन्न करने का प्रोग्राम


मान लीजिए हमारे पास एक स्ट्रिंग 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']

  1. - पायथन में दिए गए स्ट्रिंग्स के सबस्ट्रिंग्स को सभी संभावित सबस्ट्रिंग्स के सेट में दिए गए स्थानों पर खोजने का प्रोग्राम

    मान लीजिए हमें n संख्या में स्ट्रिंग्स दी गई हैं; str1, str2, str3,.....,strn। अब, मान लीजिए कि substr_i एक सेट है जिसमें str_i के सभी सबस्ट्रिंग्स हैं। सभी सबस्ट्र सेट्स का यूनियन substr_union है। अब हमें q संख्या में क्वेरीज दी गई हैं, और हमें substr_union के q-th तत्व को ढूंढना है। सेट substr_uni

  1. - पायथन में सभी खंडों का XOR शून्य करने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक एक सरणी और एक मान k है। खंड [left, right] (left ≤ right) का XOR उन सभी तत्वों का XOR है जिनके इंडेक्स left और right के बीच हैं (सम्मिलित)।हमें सरणी में बदलने के लिए न्यूनतम तत्वों की संख्या ज्ञात करनी है ताकि आकार k के सभी खंडों का XOR शून्य के बराबर हो।उदाहरण के लिए, य

  1. पायथन में सभी संभावित वैध पथों से अधिकतम स्कोर ज्ञात करने का प्रोग्राम पायथन में सभी संभावित वैध पथों से अधिकतम स्कोर ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास दो सरणियाँ nums1 और nums2 हैं। एक वैध पथ को इस प्रकार परिभाषित किया गया है: nums1 या nums2 को पार करने के लिए चुनें (सूचकांक-0 से)। सरणी को बाएं से दाएं पार करें। अब, यदि हम किसी ऐसे मान से गुजर रहे हैं जो nums1 और nums2 दोनों में मौजूद है, तो हम दूसरे सरणी पर पथ बदल सकते हैं।