劍指offer 正規表示式匹配

2021-09-25 12:47:12 字數 1146 閱讀 9052

題目描述

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

思路:這個題很考驗分析能力,確實有很多中情況需要討論

》特殊情況:

1、兩個字串都是空,則返回true

2、第乙個字串str不為空,而模式字串pattern為空,直接返回false

3、str為空,pattern不為空,有可能匹配成功,因為比如str="";而pattern=「ab」,可以匹配成功;

》開始匹配

1、pattern的下乙個字元不為*,直接將str的當前字元與pattern的當前字元匹配匹配成功的情況(a.兩者當前字元一樣 b.str當前不是『\0』和pattern當前是『.』),匹配成功返回true,否則就返回false;

2.pattern的下一字元為*,可以匹配0個或者乙個或者多個,分情況:

a.匹配0個,則str當前字元不變,pattern向後移動兩個,跳過

b.匹配乙個或者多個,這裡將乙個或者多個可以視為一種情況,匹配乙個時,str移向下乙個字元,pattern當前字元不變,相當於回到了情況a,而匹配多個時,也是str移向下乙個字元,pattern不變,繼續從下一字元開始匹配。

實現:c++

class solution if(

*str==

'\0'

&&*pattern==

'\0'

)//匹配完了if(

*str!=

'\0'

&&*pattern==

'\0'

)//第乙個不為空,第二個為空if(

*(pattern+1)

=='*'

)//下乙個字元為*

else}if

(*str==

*pattern||

(*pattern==

'.'&&

*str!=

'\0'))

//pattern的下一字元不為*

return false;}}

;

finished!!!

劍指offer 正規表示式匹配

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

劍指Offer 正規表示式匹配

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

劍指offer 正規表示式匹配

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