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

पायथन में स्टैम्पिंग अनुक्रम के लिए इंडेक्स खोजने का प्रोग्राम


मान लीजिए हम लोअरकेस अक्षरों का एक टारगेट स्ट्रिंग बनाना चाहते हैं। पहले, हमारे पास n '?' मार्क्स का अनुक्रम होता है (n टारगेट स्ट्रिंग की लंबाई है)। हमारे पास लोअरकेस अक्षरों का एक स्टैम्प भी होता है। प्रत्येक चाल में, हम अनुक्रम पर स्टैम्प रख सकते हैं, और उसमें हर अक्षर को स्टैम्प से संबंधित अक्षर से बदल सकते हैं। आप 10 * n चाल तक बना सकते हैं।

उदाहरण के लिए, प्रारंभिक अनुक्रम "?????" पर विचार करें, और स्टैम्प "abc" है, तो हम पहले चाल में "abc??", "?abc?", "??abc" जैसी स्ट्रिंग्स बना सकते हैं। यदि अनुक्रम को स्टैम्प करना संभव है, तो प्रत्येक चाल में स्टैम्प किए गए सबसे बाएं अक्षर के इंडेक्स का एक ऐरे वापस करें। यदि यह संभव नहीं है तो एक खाली ऐरे वापस करें। इसलिए जब अनुक्रम "ababc" है, और स्टैम्प "abc" है, तो उत्तर [0, 2] जैसा हो सकता है, क्योंकि हम "?????" -> "abc??" -> "ababc" बना सकते हैं।

उदाहरण के लिए, यदि इनपुट s = "abcd", t = "abcdbcd" है, तो आउटपुट [3,0] होगा।

हल करने के चरण

  1. यदि len(s) == 1, तो:
    • यदि t के सभी कैरेक्टर समान हैं और वे s[0] हैं, तो 0 से len(t) तक की सूची वापस करें, अन्यथा खाली सूची।
  2. ans := एक नई सूची
  3. t len(t) संख्या के "?" मार्क्स के बराबर न होने तक व्हाइल लूप चलाएं:
    • tmp := t
    • i को 0 से len(s) तक लूप चलाएं:
      • j को len(s) से i+1 तक घटाते हुए लूप चलाएं:
        • search := i संख्या के "?" + s[i:j] सबस्ट्रिंग + (len(s)-j) संख्या के "?"
        • search t में होने तक व्हाइल लूप चलाएं:
          • t.find(search) को ans के अंत में जोड़ें
          • t := t.replace(search, "?"*len(s), 1) केवल एक बार बदलें
        • यदि t == "?" * len(t), तो लूप से बाहर निकलें
      • यदि t == "?" * len(t), तो लूप से बाहर निकलें
    • यदि tmp == t, तो लूप से बाहर निकलें
  4. ans का उल्टा वापस करें।

उदाहरण

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

def solve(s, t):
    if len(s) == 1:
        return [i for i in range(len(t))] if all(ch == s[0] for ch in t) else []
    ans = []
    while t != "?" * len(t):
        tmp = t
        for i in range(len(s)):
            for j in reversed(range(i+1, len(s)+1)):
                search = "?" * i + s[i:j] + "?" * (len(s)-j)
                while t.find(search) != -1:
                    ans.append(t.find(search))
                    t = t.replace(search, "?"*len(s), 1)
                if t == "?" * len(t):
                    break
            if t == "?" * len(t):
                break
        if tmp == t:
            return []
    return ans[::-1]

s = "abcd"
t = "abcdbcd"
print(solve(s, t))

इनपुट

"abcd", "abcdbcd"

आउटपुट

[3,0]
  1. पायथन में BST में रेंज में नोड्स की संख्या खोजने का प्रोग्राम पायथन में BST में रेंज में नोड्स की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक BST है, और हमारे पास बाएं और दाएं बाउंड l और r भी हैं, हमें रूट में उन सभी नोड्स की संख्या गिननी है जिनके मान l और r के बीच हैं (सम्मिलित)। उदाहरण के लिए, यदि इनपुट जैसा है: l = 7, r = 13, तो आउटपुट 3 होगा, क्योंकि तीन नोड्स हैं: 8, 10, 12। इसे हल करने के लिए हम निम्न चरणों

  1. Python प्रोग्राम से सूची में सबसे छोटी संख्या खोजना Python प्रोग्राम से सूची में सबसे छोटी संख्या खोजना

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सूची दी गई है, हमें सूची में उपलब्ध सबसे छोटी संख्या प्रदर्शित करने की आवश्यकता है। यहां हम या तो सूची को क्रमबद्ध करके सबसे छोटा तत्व प्राप्त कर सकते हैं या बिल्ट-इन min() फ़ंक्शन का उपयोग करके सबसे छोटा तत्

  1. पायथन प्रोग्राम: किसी संख्या के सम गुणनखंडों का योग ज्ञात करें पायथन प्रोग्राम: किसी संख्या के सम गुणनखंडों का योग ज्ञात करें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक संख्या दी गई है, हमें उस संख्या के सभी सम गुणनखंडों का योग प्रदर्शित करना है। दृष्टिकोण हम जांचते हैं कि क्या संख्या विषम है, तो कोई सम गुणनखंड नहीं हैं, इसलिए 0 वापस करें। यदि संख्या सम है, तो हम गणना के माध्यम से जाते हैं