ধরুন আমাদের একটি স্ট্রিং s এবং একটি রেগুলার এক্সপ্রেশন প্যাটার্ন আছে। প্রদত্ত প্যাটার্নটি প্রদত্ত স্ট্রিংয়ের সাথে মেলে কিনা তা আমাদের পরীক্ষা করতে হবে। রেগুলার এক্সপ্রেশনে, কিছু নিয়ম আছে −
-
. (পিরিয়ড) যা যেকোনো একক অক্ষরের সাথে মেলে
-
* (তারকা) যা শূন্য বা তার বেশি পূর্ববর্তী উপাদানের সাথে মেলে।
সুতরাং, যদি ইনপুট প্যাটার্ন ="h.l*o" s ="hello" এর মত হয়, তাহলে আউটপুট হবে True, যেহেতু আমাদের আছে ra এবং তারপর একটি একক অক্ষর
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=s এর আকার
-
m :=p এর আকার
-
একটি ফাংশন dp() সংজ্ঞায়িত করুন। এটি i, j
লাগবে -
যদি j m এর মত হয়, তাহলে
-
রিটার্ন i n
এর মতই
-
-
ম্যাচ :=সত্য যখন (i
-
যদি j + 1 &m এবং p[j + 1] "*" এর মত হয়, তাহলে
-
dp(i, j + 2) অথবা (match এবং dp(i + 1, j)) অন্যথায় মিথ্যা হলে true ফেরত দিন
-
-
রিটার্ন ম্যাচ এবং 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