劍指offer之正規表示式

2021-08-19 03:55:02 字數 1164 閱讀 9577

請實現乙個函式用來匹配包括』.』和』*』的正規表示式。模式中的字元』.』表示任意乙個字元,而』*』表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串」aaa」與模式」a.a」和」ab*ac*a」匹配,但是與」aa.a」和」ab*a」均不匹配

遞迴實現

每次分別在str 和pattern中取乙個字元進行匹配,如果匹配,則匹配下乙個字元,否則,返回不匹配。

設匹配遞迴函式 match(str, pattern)。

1、如果模式匹配字元的下乙個字元不是『*』,進行逐字元匹配;不匹配直接返回false

對於 『.』 的情況比較簡單,』.』 和乙個字元匹配 match(str+1, pattern+1)

另外需要注意的是:空字串」」 和 「*」 是匹配的

2、如果模式匹配字元的下乙個字元是『*』:

如果pattern當前字元和str的當前字元匹配,有以下三種可能情況:

(1)pattern當前字元和和str的當前字元不匹配:模式後移2個字元,繼續匹配,因為』*』表示它前面的字元可以出現任意次(包含0次),就可以表示前面不匹配的字元只出現了0次。match(str, pattern+2)

(2)pattern當前字元能匹配 str 中的 1 個字元:字串後移1字元,模式後移2字元。match(str+1, pattern+2)

(3)pattern當前字元能匹配 str 中的 多 個字元(如pattern當前字元為「*」時):字串後移1位,模式不變,即繼續匹配字元的下一位,因為*可以匹配多位。match(str+1, pattern)

情況(2)可以被情況(1)和情況(3)包含。執行一次情況(3),再執行一次情況(1),就相當於情況(2)。

class solution 

bool matchcore(char* str, char* pattern)

//模式第2個不是*,且字串第1個跟模式第1個匹配,則都後移1位,否則直接返回false

if(*str==*pattern||(*pattern=='.'&&*str!='\0'))

return matchcore(str+1,pattern+1);

return

false;

}};

劍指offer之正規表示式匹配

請實現乙個函式用來匹配包含 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 abaca 匹配,但與 aa.a 及 ab a 均不匹配。這裡對於 做詳細分析 bool m...

劍指offer 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 abaca 匹配,但是與 aa.a 和 aba 均不匹配 由於只涉及兩種正規表示式的匹配,...

劍指Offer 正規表示式匹配

題目 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 實現 class s...