因為這個想得太亂了,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
Python劍指》正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 每次分別在s和patter...
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...