Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
Given an input string (s) and a pattern (p), implement regular expression matching with support for '.' and '*'.
'.' Matches any single character.
'*' Matches zero or more of the preceding element.
The matching should cover the entire input string (not partial).
Note:
s could be empty and contains only lowercase letters a-z.
p could be empty and contains only lowercase letters a-z, and characters like . or *.
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 precedeng 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 = "c*a*b"
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 = "mis*is*p*."
Output: false
My code:
class Solution:
def isMatch(self, s, p):
"""
:type s: str
:type p: str
:rtype: bool
"""
i=0
j=0
self.dict={}
judge=self.check_match(s,p,i,j)
return bool(judge)
def check_match(self,s,p,i,j):
if (i,j) in self.dict.keys():
return self.dict[i,j]
if j==len(p):
if i==len(s):
self.dict[i,j]=1
else:
self.dict[i,j]=0
else:
match=False
if i<len(s) and (p[j]==s[i] or p[j]=='.'):
match=True
if j+1<len(p) and p[j+1]=='*':
self.dict[i,j]=self.check_match(s,p,i,j+2) or match and self.check_match(s,p,i+1,j)
else:
self.dict[i,j]=match and self.check_match(s,p,i+1,j+1)
return self.dict[i,j]
Solution:
https://leetcode.com/problems/regular-expression-matching/