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

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

मान लीजिए कि हमारे पास लोअरकेस वर्णमाला वर्णों की एक स्ट्रिंग है, अन्य वर्ण जैसे "[", "|", और "]"। यहाँ "[a|b|c]" इंगित करता है कि या तो "a", "b", या "c" को एक संभावना के रूप में चुना जा सकता है। हमें उन सभी संभावित मानों वाले स्ट्रिंग्स की एक सूची ढूंढनी होगी जो s प्रतिनिधित्व कर सकते हैं। यहां "[]" को नेस्ट नहीं किया जा सकता है और इसमें कई विकल्प हो सकते हैं।

इसलिए, यदि इनपुट s ="[d|t|l]im[e|s]" जैसा है, तो आउटपुट ['डाइम', 'डिम्स', 'लाइम', 'लिम्स', 'टाइम' होगा। , 'टाइम्स']

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:

  • अगर s खाली है, तो
    • रिक्त स्ट्रिंग वाली सूची लौटाएं
  • n :=आकार का
  • seq:=एक नई सूची, res:=एक नई सूची
  • एक फंक्शन हेल्पर () को परिभाषित करें। यह स्थिति लेगा
    • यदि स्थिति n के समान है, तो
      • seq में मौजूद प्रत्येक तत्व से जुड़ें और res में डालें
    • अन्यथा,
      • अगर "[" एस के विकल्प में [सूचकांक स्थिति से अंत तक], तो
        • प्रारंभ :=pos + अनुक्रमणिका "[" s के स्थानापन्न में [सूचकांक स्थिति से अंत तक]
        • end :=pos + index of "]" s के सबस्ट्रिंग में [इंडेक्स पॉज़ से एंड तक]
        • एस के सबस्ट्रिंग में प्रत्येक विकल्प के लिए शुरू से अंत तक "|" से विभाजित किया जाता है, करते हैं
            seq के अंत में
          • एस [इंडेक्स पॉज़ से स्टार्ट - 1] डालें
          • seq के अंत में विकल्प डालें
          • सहायक(अंत + 1)
          • seq से अंतिम दो तत्व हटाएं
    • अन्यथा,
      • seq के अंत में [सूचकांक स्थिति से अंत तक] डालें
      • सहायक(एन)
      • seq से अंतिम तत्व हटाएं
  • मुख्य विधि से निम्न कार्य करें:
  • सहायक(0)
  • रिटर्न रेस को क्रमबद्ध क्रम में

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें:

उदाहरण

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. पायथन में सभी संभावित सबस्ट्रिंग के सेट में दिए गए पदों पर दिए गए स्ट्रिंग्स के सबस्ट्रिंग्स को खोजने का कार्यक्रम

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

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

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

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

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