力扣10正規表示式匹配

2021-10-01 01:49:21 字數 860 閱讀 8963

def ismatch(text, pattern) -> bool:

if not pattern: return not text

first_match = bool(text) and pattern[0] in

if len(pattern) >= 2 and pattern[1] == '*':

return ismatch(text, pattern[2:]) or \

first_match and ismatch(text[1:], pattern)

# 解釋:如果發現有字元和 '*' 結合,

# 或者匹配該字元 0 次,然後跳過該字元和 '*'

# 或者當 pattern[0] 和 text[0] 匹配後,移動 text

else:

return first_match and ismatch(text[1:], pattern[1:])

遇到星號後,會有多種選擇去匹配原字串, aaa,aa,a可以選擇匹配0個a,或者多個a,這要取決於後面的字串情況,所以也算擁有重疊子問題,在這裡分支下去。

class solution ;

vectormem;

bool ismatch(string s, string p)

bool dp(int i,int j,string s ,string p)

};

該問題存在回溯的情況,使用備忘錄表將已經匹配的子問題儲存,下次可以直接查詢備忘錄表,如果已經儲存了就可以直接得到答案。

10 正規表示式匹配 力扣

題意理解 給頂乙個模式串,表示匹配任意乙個字母,表示重複0次或多次前面乙個字母。對於任乙個字串是否和模式串匹配。問題分析 遞迴非.情況逐個字母匹配即可 看成乙個字母,直接匹配 比較複雜,按照語法說明,可以匹配0個前面字母,或1個,或多個情況 思路是 如果模式串第二個字元是 那麼,模式串可以忽略掉前面...

力扣 困難 10 正規表示式匹配

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...

力扣LeetCode 10 正規表示式匹配

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...