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

प्रोग्राम इंडेक्स को खोजने के लिए जहां एक स्ट्रिंग के सबस्ट्रिंग पूरी तरह से दूसरे स्ट्रिंग के साथ मेल खाते हैं या पाइथन में एक स्थिति में भिन्न होते हैं

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

इसलिए, यदि इनपुट string1 ='tpoint', string2 ='pi' जैसा है, तो आउटपुट 1 2 होगा।

पहली स्ट्रिंग से सबस्ट्रिंग जो दूसरी स्ट्रिंग से मेल खाती है या इंडेक्स 1 और 2 में एक स्थिति में भिन्न होती है, 'पो' और 'ओई' हैं।

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

  • फ़ंक्शन को परिभाषित करें search() । इसमें string1, string2
      . लगेगा
    • str_cat :=string1 + string2
    • z_list :=str_cat के आकार की एक नई सूची 0 के साथ आरंभ की गई
    • z_list[0] :=str_cat का आकार
    • दाएं:=0
    • बाएं:=0
    • i श्रेणी 1 से str_cat के आकार के लिए, करें
      • अगर मैं> सही, तो
        • j :=0
        • जबकि j+i
        • j :=j + 1
      • z_list[i] :=j
      • अगर j> 0, तो
        • बाएं:=मैं
        • दाएं:=i + j-1
    • अन्यथा,
      • k :=i - लेफ्ट
      • r_len :=दाएँ - i + 1
      • अगर z_list[k]
      • z_list[i] :=z_list[k]
    • अन्यथा,
      • एम:=दाएं + 1
      • जबकि m
      • एम :=एम + 1
      • z_list[i] :=m - i
      • बाएं:=मैं
      • दाएं:=एम -1
  • z_list[i] :=न्यूनतम आकार का string1, z_list[i]
  • रिटर्न z_list[स्ट्रिंग1 के इंडेक्स आकार से अंत तक]
  • fwd :=search(str2, str1)
  • bwrd:=search(str2[index 0 to end], str1[index 0 to end])
  • सूची को उल्टा करें bwrd
  • idx :=एक नई सूची
  • i के लिए 0 से लेकर str1 के आकार तक - (str2 + 1 का आकार), करें
    • अगर fwd[i] + bwrd[i + (str2 - 1 का आकार)]>=str2 -1 का आकार, तो
      • आईडीएक्स के अंत में i का स्ट्रिंग प्रतिनिधित्व डालें
  • यदि idx का आकार 0 के समान है, तो
    • झूठी वापसी
  • अन्यथा,
    • आईडीएक्स का स्ट्रिंग प्रतिनिधित्व
  • उदाहरण

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

    def search(string1, string2):
       str_cat = string1 + string2
       z_list = [0] * len(str_cat)
       z_list[0] = len(str_cat)
       right = 0
       left = 0
       for i in range(1, len(str_cat)):
          if i > right:
             j = 0
             while j + i < len(str_cat) and str_cat[j] == str_cat[j+i]:
                j += 1
             z_list[i] = j
             if j > 0:
                left = i
                right = i + j - 1
          else:
             k = i - left
             r_len = right - i + 1
             if z_list[k] < r_len:
                z_list[i] = z_list[k]
             else:
                m = right + 1
                while m < len(str_cat) and str_cat[m] == str_cat[m -i]:
                   m += 1
                z_list[i] = m - i
                left = i
                right = m - 1
          z_list[i] = min(len(string1), z_list[i])
       return z_list[len(string1):]
    
    def solve(str1, str2):
       fwd = search(str2, str1)
       bwrd = search(str2[::-1], str1[::-1])
       bwrd.reverse()
       idx = []
       for i in range(len(str1) - len(str2)+1):
          if fwd[i] + bwrd[i+len(str2)-1] >= len(str2)-1:
             idx.append(str(i))
       if len(idx) == 0:
          return False
       else:
          return (" ".join(idx))
    
    print(solve('tpoint', 'pi'))

    इनपुट

    'tpoint', 'pi'
    

    आउटपुट

    1 2

    1. पायथन में ग्रिड बॉक्स में गेंद कहां लैंड करती है, यह जानने का कार्यक्रम

      मान लीजिए, हमें एक mxn ग्रिड बॉक्स दिया गया है, जहां प्रत्येक सेल में एक बोर्ड होता है जो या तो ऊपर-दाएं से नीचे-बाएं, या ऊपर-बाएं से नीचे-दाएं तक स्थित होता है। अब ऊपर की कोशिकाओं से, एक गेंद बॉक्स में डाल दी जाती है और हमें यह जांचना होता है कि क्या वह गेंद बॉक्स के नीचे तक पहुँचती है। ग्रिड को मै

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

      मान लीजिए कि हमारे पास एक स्ट्रिंग s है, तो हमें लेक्सिकोग्राफ़िक रूप से सबसे छोटी स्ट्रिंग ढूंढनी होगी जो कि दी जा सकती है यदि हम दिए गए स्ट्रिंग s में दो वर्णों के बीच अधिकतम एक स्वैप कर सकते हैं। इसलिए, यदि इनपुट zyzx जैसा है, तो आउटपुट xyzz होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

    1. पायथन में एक पंक्ति में संभावित स्थिति की संख्या ज्ञात करने का कार्यक्रम

      मान लीजिए कि हमारे पास एक संख्या n, और p और q है। अब मान लीजिए कि हम n लोगों की एक पंक्ति में खड़े हैं। हम नहीं जानते कि हम किस स्थिति में हैं, लेकिन हम जानते हैं कि हमारे सामने कम से कम p लोग हैं और हमारे पीछे अधिक से अधिक q लोग हैं। हमें उन संभावित पदों की संख्या का पता लगाना होगा जिनमें हम हो सकत