因爲這個想得太亂了,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