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

पायथन में वाइल्डकार्ड मिलान


मान लीजिए कि हमारे पास एक इनपुट स्ट्रिंग s और दूसरी इनपुट स्ट्रिंग p है। यहाँ मुख्य स्ट्रिंग है और p पैटर्न है। हमें एक विधि को परिभाषित करना होगा, जो स्ट्रिंग में पैटर्न से मेल खा सके। इसलिए हमें इसे रेगुलर एक्सप्रेशन के लिए लागू करना होगा, जो '?' और '*' जैसे वाइल्डकार्ड वर्णों का समर्थन करता है।

  • डॉट '?' किसी एक वर्ण से मेल खाता है

  • स्टार '*' शून्य या अधिक वर्णों से मेल खाता है।

तो उदाहरण के लिए, यदि इनपुट s ="aa" और p ="a?" जैसा है, तो यह सही होगा, उसी इनपुट स्ट्रिंग के लिए, यदि पटर "? *" है, तो यह सत्य होगा।

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

  • ss:=s और ps का आकार:=p का आकार

  • dp को ss x ps आकार का एक मैट्रिक्स बनाएं, और इसे गलत मान का उपयोग करके भरें

  • इनके पहले एक खाली जगह जोड़कर p और s को अपडेट करें

  • 1 से ps की श्रेणी में i के लिए -

    • अगर p[i] =तारा, तो

      • डीपी [0, आई]:=डीपी [0, आई -1]

  • मेरे लिए 1 से ss की सीमा में

    • j के लिए 1 से ps की सीमा में

      • अगर s[i] p[j] है, या p[j] '?' है, तो

        • डीपी [आई, जे]:=डीपी [i - 1, जे - 1]

      • अन्यथा जब p[j] तारा है, तब

        • dp[i, j] :=अधिकतम dp[i-1, j] और dp[i, j-1]

  • वापसी डीपी [एसएस, पीएस]

उदाहरण (पायथन)

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

class Solution(object):
   def isMatch(self, s, p):
      sl = len(s)
      pl = len(p)
      dp = [[False for i in range(pl+1)] for j in range(sl+1)]
      s = " "+s
      p = " "+p
      dp[0][0]=True
      for i in range(1,pl+1):
         if p[i] == '*':
            dp[0][i] = dp[0][i-1]
      for i in range(1,sl+1):
         for j in range(1,pl+1):
            if s[i] == p[j] or p[j] == '?':
               dp[i][j] = dp[i-1][j-1]
            elif p[j]=='*':
               dp[i][j] = max(dp[i-1][j],dp[i][j-1])
      return dp[sl][pl]
ob = Solution()
print(ob.isMatch("aa", "a?"))
print(ob.isMatch("aaaaaa", "a*"))

इनपुट

"aa", "a."
"aaaaaa", "a*"

आउटपुट

True
True

  1. issuperset () पायथन में issuperset () पायथन में

    इस लेख में, हम पायथन में issuperset() और विभिन्न क्षेत्रों में इसके कार्यान्वयन के बारे में जानेंगे। यह विधि बूलियन ट्रू लौटाती है यदि एक सेट बी के सभी तत्वों में सभी तत्व सेट ए होते हैं जो एक तर्क के रूप में पारित होते हैं और यदि ए के सभी तत्व बी में मौजूद नहीं होते हैं तो झूठा रिटर्न देता है। इस

  1. - रेगेक्स के साथ पायथन में पैटर्न मिलान

    रेगुलर एक्सप्रेशन क्या है? वास्तविक दुनिया में, अधिकांश प्रोग्रामिंग भाषाओं में स्ट्रिंग पार्सिंग को नियमित अभिव्यक्ति द्वारा नियंत्रित किया जाता है। पायथन प्रोग्रामिंग भाषा में रेगुलर एक्सप्रेशन टेक्स्ट पैटर्न के मिलान के लिए उपयोग की जाने वाली एक विधि है। प्रत्येक पायथन इंस्टॉलेशन के साथ आने वाल

  1. पायथन में ओपनसीवी का उपयोग करके टेम्पलेट मिलान पायथन में ओपनसीवी का उपयोग करके टेम्पलेट मिलान

    टेम्पलेट मिलान एक ऐसी तकनीक है, जिसके द्वारा वास्तविक छवि से पैच या टेम्पलेट का मिलान किया जा सकता है। यह मूल रूप से एक पैटर्न मिलान तंत्र है। पायथन में ओपनसीवी मॉड्यूल है। ओपनसीवी का उपयोग करके, हम आसानी से मैच ढूंढ सकते हैं। तो इस समस्या में, OpenVC टेम्पलेट मिलान तकनीकों का उपयोग किया जाता है।