Given an input string s and a pattern p, implement regular expression matching with support for '.' and '*' where:
'.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial).
Input: s = "aa", p = "a" Output: false Explanation: "a" does not match the entire string "aa".
Input: s = "aa", p = "a*" Output: true Explanation: '*' means zero or more of the preceding element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".
Input: s = "ab", p = "." Output: true Explanation: "." means "zero or more (*) of any character (.)". Example 4:
Input: s = "aab", p = "cab" Output: true Explanation: c can be repeated 0 times, a can be repeated 1 time. Therefore, it matches "aab".
Input: s = "mississippi", p = "misisp*." Output: false
1 <= s.length <= 20 1 <= p.length <= 30 s contains only lowercase English letters. p contains only lowercase English letters, '.', and ''. It is guaranteed for each appearance of the character '', there will be a previous valid character to match.
import re
p = "m.*m"
s = "madam"
p = r"{}".format(p)
p = re.compile(p)
if p.fullmatch(s):
print("true")
else:
print("false")
true
The Stubbed Code on Leetcode follows as given below and expects to return "true" or "false" based on the matching:
class Solution:
def isMatch(self, s: str, p: str) -> bool:
#code starts from here
The same code when used in this above stub doesn't seem to work and prints only "true" for every test case :(. However, if I use the print statements in place of return, it produces the correct output. But, since the code requests/expects only return value, it marks my answer as wrong.
class Solution:
def isMatch(self, s: str, p: str) -> bool:
p = r"{}".format(p)
p = re.compile(p)
if p.fullmatch(s):
return "true"
else:
return "false"
"aa"
"a"
"aa"
"a*"
"ab"
".*"
"aab"
"c*a*b"
"mississippi"
"mis*is*p*."
Your function is supposed to return a boolean (-> bool
) so you can directly return fullmatch
:
class Solution:
def isMatch(self, s: str, p: str) -> bool:
pattern = re.compile(rf"{p}")
return pattern.fullmatch(s)