劍指offer 正則式匹配

2021-07-11 03:47:20 字數 1276 閱讀 6613

// 正規表示式.cpp : 定義控制台應用程式的入口點。

//題目描述:請實現乙個函式用來匹配包括'.'和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。

// 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配

//解題思路:通過分析可知出現『*』的時候可能匹配的情況為:0個,1個,多個,因為要求的是這三種情況的或所以用遞迴實現較為簡單

// 當匹配到乙個字元時會出現的情況為:1相等,2不相等

// 1.相等的情況,繼續匹配下乙個字元,因為這次相等可能下個字元是'*'有可能會匹配多個字元所以放在最後的if中

// 2.不相等的情況有:1:下個字元是* 可能會匹配字串的0個字元,這時str前移一位,pattern前移兩位跳過'*'

// 模式串為主的進行思考

// 1.這次的字元相等,*可能會匹配乙個字元,匹配乙個字元時match(str+1,pattern+2)

// 2.這次的字元相等,*可能會匹配多個字元,匹配多個字元時match(str+1,pattern),以為模式串*的後面可能會出現和*前面相同的字元所以要

// match(str, pattern + 2)判斷下這種情況

// 3.這次的字元不相等時,*可能匹配0個字元,遞迴查詢match(str,pattern+2),如果下個字元不是*則不匹配return false

#include "stdafx.h"

#includeusing namespace std;

bool match(char* str, char* pattern)

if (*pattern == '/0') //模式串少了

return false;

if (*(pattern+1) == '*')

else

return match(str, pattern + 2); //這次的字元不相等,只有可能匹配0個

} if (str[0] == pattern[0] || pattern[0] == '.') //這次的字元相等,兩個串各進一位

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

return false;

}int main()

《劍指offer》17 判斷正則式是否匹配

應該說,在 劍指offer 前半的題目中,正則式匹配無論是新穎程度還是難度都是比較高的一題。題目給出乙個字串和乙個帶有 與 的正規表示式,求問這個表示式和原字串是否匹配。其中的匹配規則是 字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 舉個例子 字串 aaa 與模式 a.a 和...

劍指offer 正規表示式匹配

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

劍指Offer 正規表示式匹配

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