10. Regular Expression Matching (HARD)
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).
Example 1:
Input: s = "aa", p = "a" Output: false Explanation: "a" does not match the entire string "aa".
Example 2:
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".
Example 3:
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".
Example 5:
Input: s = "mississippi", p = "misisp*." Output: false
Constraints:
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.
I came up with my solution which seems to work correctly on my local python environment, but doesn't work on the Leetcode environment
MY CODE (on my local Python interpreter):
import re
p = "m.*m"
s = "madam"
p = r"{}".format(p)
p = re.compile(p)
if p.fullmatch(s):
print("true")
else:
print("false")
OUTPUT:
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.
My Exact Code on LeetCode:
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"
With the print statements, it produces correct output in "stdout" and not in "Output.
Please help me with this problem. I don't know why Leetcode is not displaying the correct output when I use return statements. The test case used in the Leetcode environment is given below, where alternate lines represent "string" and "pattern" respectively:
"aa"
"a"
"aa"
"a*"
"ab"
".*"
"aab"
"c*a*b"
"mississippi"
"mis*is*p*."

