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

Python में वाइल्डकार्ड मिलान


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

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

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

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

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

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

  • dp को आकार ss x ps का मैट्रिक्स बनाएं, और इसे false मान से भरें

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

  • i के लिए range 1 से ps तक −

    • यदि p[i] = स्टार, तो

      • dp[0, i] := dp[0, i - 1]

  • i के लिए range 1 से ss तक

    • j के लिए range 1 से ps तक

      • यदि s[i] p[j] है, या p[j] '?' है, तो

        • dp[i, j] := dp[i - 1, j - 1]

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

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

  • dp[ss, ps] लौटाएं

उदाहरण (Python)

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

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() और विभिन्न क्षेत्रों में इसके कार्यान्वयन के बारे में जानेंगे।यह मेथड बूलियन True वापस करता है यदि सेट B के सभी तत्व सेट A के सभी तत्वों को समाहित करते हैं जिसे तर्क के रूप में पारित किया जाता है और झूठा वापस करता है यदि A के सभी तत्व B में मौजूद नहीं हैं।इसका म

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

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

  1. Python में OpenCV का उपयोग करके टेम्पलेट मैचिंग Python में OpenCV का उपयोग करके टेम्पलेट मैचिंग

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