मान लीजिए कि हमारे पास एक स्ट्रिंग s और एक रेगुलर एक्सप्रेशन पैटर्न है। हमें यह जांचना है कि दिया गया पैटर्न दिए गए स्ट्रिंग से मेल खाता है या नहीं। रेगुलर एक्सप्रेशन में, कुछ नियम हैं -
-
. (अवधि) जो किसी एक वर्ण से मेल खाता हो
-
* (तारांकन) जो पिछले तत्व के शून्य या अधिक से मेल खाता है।
इसलिए, यदि इनपुट पैटर्न ="h.l*o" s ="hello" जैसा है, तो आउटपुट सही होगा, क्योंकि हमारे पास ra और फिर एक वर्ण है
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n :=s का आकार
-
मी :=p का आकार
-
एक फ़ंक्शन को परिभाषित करें dp() । यह ले जाएगा मैं, जे
-
यदि j, m के समान है, तो
-
वापसी मैं n के समान है
-
-
मैच :=सच जब (i
-
अगर j + 1 &m और p[j + 1] "*" के समान है, तो
-
dp(i, j + 2) या (मिलान और dp(i + 1, j)) अन्यथा असत्य होने पर सही लौटें
-
-
वापसी मैच और dp(i + 1, j + 1)
-
मुख्य विधि से वापसी dp(0, 0)
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class Solution: def solve(self, p, s): n = len(s) m = len(p) def dp(i, j): if j == m: return i == n match = i < n and (s[i] == p[j] or p[j] == ".") if j + 1 < m and p[j + 1] == "*": return dp(i, j + 2) or (match and dp(i + 1, j)) return match and dp(i + 1, j + 1) return dp(0, 0) ob = Solution() pattern = "h.l*o" s = "hello" print(ob.solve(pattern, s))
इनपुट
"h.l*o", "hello"
आउटपुट
True