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

पायथन में के-समान स्ट्रिंग्स के लिए K का सबसे छोटा मान खोजने का कार्यक्रम

मान लीजिए कि हमारे पास दो तार s और t हैं। ये दो तार K-समान हैं यदि हम दो अक्षरों की स्थिति को s ठीक K बार में स्वैप कर सकते हैं ताकि परिणामी स्ट्रिंग t हो। तो, हमारे पास दो विपर्यय s और t हैं, हमें सबसे छोटा K ज्ञात करना है जिसके लिए s और t K-समान हैं।

इसलिए, यदि इनपुट s ="abc" t ="bac" जैसा है, तो आउटपुट 1 होगा।

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

  • एक फ़ंक्शन पड़ोसियों() को परिभाषित करें। इसमें नया_डेटा लगेगा

  • new_data में प्रत्येक अनुक्रमणिका i और मान c के लिए, करें

    • यदि c, t[i] के समान नहीं है, तो

      • लूप से बाहर आएं

  • j के लिए i+1 से लेकर new_data - 1 के आकार की श्रेणी में, करें

    • यदि आप [j] t[i] के समान हैं, तो

      • एक्सचेंज new_data[i] new_data[j]

      • new_data से सभी तत्वों को जोड़कर एक स्ट्रिंग उत्पन्न करें और अगली कॉल से वापस लौटें, इस क्षेत्र से फिर से शुरू करें

      • एक्सचेंज new_data[i] new_data[j]

  • मुख्य विधि से, निम्न कार्य करें:

  • q :=एक कतार बनाएं उत्तर जोड़ी डालें (ओं, 0)

  • देखा :=एस से एक नया सेट

  • जबकि q खाली नहीं है, करें

    • (u, swap_cnt) :=q का पहला आइटम और इसे q से हटा दें

    • यदि आप t के समान हैं, तो

      • वापसी swap_cnt

    • पड़ोसियों में प्रत्येक वी के लिए (यू सूची के रूप में), करो

      • अगर v दिखाई नहीं दे रहा है, तो

        • v को देखा के रूप में चिह्नित करें

        • q के अंत में (v, swap_cnt+1) डालें

  • वापसी 0

उदाहरण

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

from collections import deque
def solve(s, t):
   def swap(data, i, j):
      data[i], data[j] = data[j], data[i]

   def neighbors(new_data):
      for i, c in enumerate(new_data):
         if c != t[i]: break

      for j in range(i+1, len(new_data)):
         if u[j] == t[i]:
            swap(new_data, i, j)
            yield "".join(new_data)
            swap(new_data, i, j)

   q = deque([(s, 0)])
   seen = set(s)
   while q:
      u, swap_cnt = q.popleft()
      if u == t:
         return swap_cnt
      for v in neighbors(list(u)):
         if v not in seen:
            seen.add(v)
            q.append((v, swap_cnt+1))
   return 0

s = "abc"
t = "bac"
print(solve(s, t))

इनपुट

"abc, bac"

आउटपुट

1

  1. पायथन में निर्देशित ग्राफ में सबसे बड़ा रंग मान खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास n रंगीन नोड्स और m विभिन्न किनारों के साथ एक निर्देशित ग्राफ है। और नोड्स 0 से n-1 तक गिने जाते हैं। हमारे पास लोअरकेस अक्षरों वाला एक स्ट्रिंग कॉल है, जहां col[i] इस ग्राफ (0-अनुक्रमित) में ith नोड के रंग का प्रतिनिधित्व करता है। हमारे पास एक किनारे की सूची भी है जहां किनारों

  1. सूची में सबसे छोटी संख्या खोजने के लिए पायथन प्रोग्राम

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

  1. मॉड्यूलर घातांक के लिए पायथन कार्यक्रम

    तीन नंबर x, y और z को देखते हुए, हमारा काम (x^y)% z . की गणना करना है उदाहरण Input: x = 2, y = 3, p = 3 Output: 2 स्पष्टीकरण :2^3% 3=8% 3 =2. एल्गोरिदम Step 1: Input three numbers. Step 2: then we use pow() to calculating power and % for modular. Step 3: display result. उदाहरण कोड x = int(inp