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

पायथन में समान सबस्ट्रिंग के जोड़े की संख्या का पता लगाने के लिए कार्यक्रम

मान लीजिए हमें दो तार दिए गए हैं, दोनों लोअरकेस अक्षरों से बने हैं। हमें दी गई शर्तों को पूरा करने वाले चौगुनी (p, q, r, s) की संख्या ज्ञात करनी है -

  • 0 <=p <=q <=पहली स्ट्रिंग की लंबाई।

  • 0 <=r <=s <=दूसरी स्ट्रिंग की लंबाई।

  • पहली स्ट्रिंग के इंडेक्स पी से शुरू होने वाली और पहली स्ट्रिंग के इंडेक्स क्यू पर समाप्त होने वाली सबस्ट्रिंग को दूसरी स्ट्रिंग के इंडेक्स क्यू से शुरू होने और दूसरी स्ट्रिंग के इंडेक्स आर पर समाप्त होने वाले सबस्ट्रिंग के बराबर होना चाहिए।

  • उपरोक्त को संतुष्ट करने वाले सभी चौगुनी के भीतर q - r न्यूनतम संभव मान होना चाहिए।

हमें ऐसे चौगुनी संख्या ज्ञात करनी है।

इसलिए, यदि इनपुट firstString ='hgfn', secondString ='gfrt' जैसा है, तो आउटपुट 2 होगा।

दो चौगुनी (1, 1, 0, 0) और (2, 2, 1, 1) हैं जो शर्तों को पूरा करते हैं और q - r के लिए न्यूनतम मान रखते हैं।

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

  • फ़ंक्शन को परिभाषित करें ord() । इसमें ch
      . लगेगा
    • ch का यूनिकोड मान लौटाएं
  • मुख्य विधि से निम्न कार्य करें -
  • बाएं:=आकार 26 की एक नई सूची जिसमें अनंत मूल्य है
  • दाएं:=आकार 26 की एक नई सूची जिसमें मान -1 है
  • res :=0
  • मील:=अनंत
  • प्रत्येक अनुक्रमणिका i, और वर्ण ch के लिए firstString, do
    • बाएं[ord(ch) - ord('a')] :=न्यूनतम (बाएं[ord(ch) - ord('a')], i)
  • प्रत्येक अनुक्रमणिका के लिए i, और वर्ण ch सेकंडस्ट्रिंग में, करते हैं
    • दायाँ[ord(ch) - ord('a') ] :=अधिकतम अधिकार[ord(ch) - ord('a') ], i
  • 0 से 25 की सीमा में i के लिए, करें
    • यदि बाएं [i] -1 के समान नहीं है, तो
      • मील:=न्यूनतम (मील, बाएँ[i] - दाएँ[i])
  • 0 से 25 की सीमा में i के लिए, करें
    • यदि बाएँ[i] अनंत के समान नहीं है और दाएँ[i] -1 के समान नहीं है, तो
      • अगर बाएँ[i] - दाएँ[i] mi के समान है, तो
        • रेस :=रेस + 1
  • रिटर्न रेस

उदाहरण

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

def solve(firstString, secondString):
   left = [float('inf')] * 26
   right = [-1] * 26
   res = 0
   mi = float('inf')
   for i, ch in enumerate(firstString):
      left[ord(ch) - ord('a')] = min(left[ord(ch) - ord('a')], i)
   for i, ch in enumerate(secondString):
      right[ord(ch) - ord('a')] = max(right[ord(ch) - ord('a')], i)
   for i in range(26):
      if left[i] != -1:
         mi = min(mi, left[i] - right[i])
   for i in range(26):
      if left[i] != float('inf') and right[i] != -1:
         if left[i] - right[i] == mi:
            res += 1
   return res

print(solve('hgfn', 'gfrt'))

इनपुट

'hgfn', 'gfrt'

आउटपुट

2

  1. यह पता लगाने के लिए कार्यक्रम कि क्या पायथन में सभी के द्वारा ग्राफ़ को ट्रैवर्स किया जा सकता है

    मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n शीर्षों की संख्या 0 से n - 1 है। ग्राफ अप्रत्यक्ष है और प्रत्येक किनारे का वजन है। ग्राफ में तीन प्रकार के भार हो सकते हैं और प्रत्येक भार एक विशेष कार्य को दर्शाता है। दो लोग हैं जो ग्राफ को पार कर सकते हैं, अर्थात् जैक और केसी। जैक ग्राफ को पार कर सकता

  1. पायथन में गोदाम में रखे जाने वाले बक्सों की संख्या का पता लगाने का कार्यक्रम

    मान लीजिए, हमारे पास पूर्णांक वाले दो सरणियाँ हैं। एक सूची में कुछ इकाई चौड़ाई वाले बक्सों की ऊँचाई होती है और दूसरी सूची में गोदाम में कमरों की ऊँचाई होती है। कमरों की संख्या 0...n है, और कमरों की ऊंचाई सरणी गोदाम में उनके संबंधित सूचकांक में प्रदान की जाती है। हमें पता लगाना है कि कितने बक्सों को

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

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