题目
请实现一个函数用来匹配包括'.'和'*'的正则表达式。 模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。 例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
思路
这个题就是情况多,需要考虑全面。在参考了网上的代码之后,我分情况整理了一下代码的实现思路。
可以看出思路还是比较清晰的,需要我们思维缜密,考虑完整。
实现代码
class Solution:
def match(self,s,pattern):
if s is None or pattern is None:
return False
if s == pattern:
return True
if pattern == "":
return False
if s == "":
if pattern == ".":
return True
if len(pattern) >= 2 and pattern[1] == "*":
return self.match(s,pattern[2:])
else:
return False
if len(pattern) >= 2 and pattern[1] == "*":
if pattern[0] != s[0] and pattern[0] != ".":
return self.match(s,pattern[2:])
else:
return self.match(s[1:],pattern[2:]) or \
self.match(s,pattern[2:]) or\
self.match(s[1:],pattern)
else:
if pattern[0] == s[0] or pattern[0] == ".":
return self.match(s[1:],pattern[1:])
else:
return False
s = Solution()
print(s.match("aaa","a*a")) #True
print(s.match("a","a*a")) #True
print(s.match("","a*")) #True
print(s.match("a",".a*")) #True
print(s.match("a","")) #False
print(s.match("","")) #True
print(s.match("aaaaabc","a*bc")) #True
print(s.match("aaaaabc",".a*bc")) #True
print(s.match("aaaaabc",".bc")) #False
print(s.match("aaaaabc",None)) #False