因为这个想得太乱了,mark在这边记下来
NOTE:涉及二元的只有*,因此将*和其他分开即可。同时又是一个递归方法,设置扫描终止条件。
class Solution3:
# s, pattern都是字符串
# 问题可以分为两个部分,匹配过了的,和没有匹配的,可以拆分之后用递归来完成
# 每次匹配第一位时,都有三种情况
def match(self, s, pattern):
# write code here
if s is None or pattern is None:
return False
s_idx = 0
pattern_idx = 0
return self.matchCore(s, s_idx, pattern, pattern_idx)
def matchCore(self, s, s_idx, pattern, p_idx):
if len(s) == s_idx and len(pattern) == p_idx:
return True
if len(s) > s_idx and len(pattern) == p_idx:
return False
if p_idx + 1 < len(pattern) and pattern[p_idx + 1] == '*':
if (not isChrTail(len(s), s_idx)) and (pattern[p_idx] == s[s_idx] or pattern[p_idx] == '.'):
return self.matchCore(s, s_idx + 1, pattern, p_idx + 2) or self.matchCore(s, s_idx, pattern,p_idx + 2) or self.matchCore(s, s_idx + 1,pattern,p_idx)
pass
else:
return self.matchCore(s, s_idx, pattern, p_idx + 2)
pass
pass
if (not isChrTail(len(s), s_idx)) and (pattern[p_idx] == s[s_idx] or pattern[p_idx] == '.'):
return self.matchCore(s, s_idx + 1, pattern, p_idx + 1)
return False
def isChrTail(str_len, idx):
if str_len - idx:
return False
return True