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

पायथन में विशिष्ट स्ट्रिंग समाहित करने वाली सबसे छोटी सबस्ट्रिंग ढूंढने का प्रोग्राम

मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं। हमें s में सबसे छोटी सबस्ट्रिंग ढूंढनी है जहां t उस सबस्ट्रिंग का सबसीक्वेंस भी हो। यदि उस प्रकार की सबस्ट्रिंग मौजूद नहीं है, तो हम खाली स्ट्रिंग लौटाएंगे, और यदि कई सबसे छोटी सबस्ट्रिंग्स हैं, तो हम बाएं वाली को लेंगे।

उदाहरण के लिए, यदि इनपुट s = "abcbfbghfb", t = "fg" है, तो आउटपुट fbg होगा।

समाधान दृष्टिकोण

हम डायनामिक प्रोग्रामिंग का उपयोग करते हैं जहां dp[i] इंडेक्स i पर समाप्त होने वाले T के प्रीफिक्स से मेल खाने वाली न्यूनतम लंबाई स्टोर करता है।

एल्गोरिदम चरण:

  1. N = len(S), dp = आकार N की सूची जिसे infinity से इनिशियलाइज़ किया गया
  2. प्रत्येक i (0 से N-1) के लिए:
    • यदि S[i] == T[0], तो dp[i] = 1
  3. j 1 से len(T)-1 तक के लिए:
    • last = खाली मैप, dp2 = infinity से इनिशियलाइज़्ड सूची
    • प्रत्येक i (0 से N-1) के लिए:
      • यदि S[i] == T[j]:
        • prev_i = last.get(T[j-1], None)
        • यदि prev_i None नहीं है: dp2[i] = dp[prev_i] + (i - prev_i)
        • last[S[i]] = i
    • dp = dp2
  4. m = min(dp), i = dp.index(m)
  5. यदि m == infinity, तो खाली स्ट्रिंग लौटाएं
  6. S[i - dp[i] + 1 : i + 1] लौटाएं

पायथन कार्यान्वयन


class Solution:
    def solve(self, S, T):
        INF = float("inf")
        N = len(S)
        dp = [INF] * N
        
        for i in range(N):
            if S[i] == T[0]:
                dp[i] = 1
        
        for j in range(1, len(T)):
            last = {}
            dp2 = [INF] * N
            for i in range(N):
                if S[i] == T[j]:
                    prev_i = last.get(T[j-1], None)
                    if prev_i is not None:
                        dp2[i] = dp[prev_i] + (i - prev_i)
                    last[S[i]] = i
            dp = dp2
        
        m = min(dp)
        i = dp.index(m)
        if m == INF:
            return ""
        return S[i - dp[i] + 1 : i + 1]

ob = Solution()
print(ob.solve("abcbfbghfb", "fg"))  # fbg

इनपुट

"abcbfbghfb", "fg"

आउटपुट

fbg

व्याख्या:

S = "abcbfbghfb", T = "fg"

  • 'f' इंडेक्स 6 पर मिला
  • 'g' इंडेक्स 7 पर मिला
  • सबस्ट्रिंग S[6:8] = "fg" लेकिन "fbg" (इंडेक्स 5-7) भी 'f' और 'g' को सबसीक्वेंस के रूप में समाहित करता है
  • न्यूनतम लंबाई 3: "fbg"
  1. पायथन में जांचें कि ग्राफ सभी द्वारा पारगम्य है या नहीं पायथन में जांचें कि ग्राफ सभी द्वारा पारगम्य है या नहीं

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

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

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

  1. - Python में String में Substring की nth Occurrence कैसे Find करें?

    Substring की nth Occurrence Find करना आप Substring पर Max n+1 Splits के साथ Split करके String में Substring की nth Occurrence Find कर सकते हैं। यदि Resulting List का Size n+1 से Greater है, तो इसका मतलब है कि Substring n से अधिक बार Occur होती है। इसका Index Simple Formula से पाया जा सकता है: Origi