class Solution(object):
@lru_cache
def isMatch(self, text, pattern):
if not pattern:
return not text
first_match = bool(text) and pattern[0] in {text[0], '.'}
# 匹配 *
if len(pattern) >= 2 and pattern[1] == '*':
return (self.isMatch(text, pattern[2:]) or
first_match and self.isMatch(text[1:], pattern))
# 匹配单个字符
else:
return first_match and self.isMatch(text[1:], pattern[1:])