請實現乙個函式用來匹配包括 『.』 和 『*』 的正規表示式。模式中的字元 『.』 表示任意乙個字元,而 『*』 表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配
首先,考慮特殊情況:
兩個字串都為空,返回true
當第乙個字串不為空,而第二個字串為空,返回false(因為這樣,就無法匹配成功了,而如果第乙個字串為空了,第二個字串非空,有可能匹配成功,比如第二個字串是 「a*a*a*a*」, 『*』 之前的元素可以出現0次)
之後就開始匹配第乙個字元,這裡有兩種可能:匹配成功或匹配失敗。但考慮到pattern下乙個字元可能是 『*』 ,這裡我們分兩種情況討論:pattern下乙個字元為 『*』 或不為 『*』 :
pattern下乙個字元不為『*』:直接匹配當前字元。如果匹配成功,繼續匹配下乙個;如果匹配失敗,直接返回false。
這裡的「匹配成功」有兩種情況,第一:兩個字元相同,第二:pattern的當前字元為『.』,同時str的當前字元不為『\0』。
class solution
//pattern中下乙個字元是'*'
else}}
;
在 pattern中下乙個字元是 『*』,且當前字元匹配時
return match(str+1, pattern)|| match(str, pattern+2);
之所以match(str, pattern+2),是因為可能出現匹配過了的情況,
例子:「aaa」,「a*a」
pattern的第乙個字元匹配到了ptr的第三個字元,
所以需要:
return match(str+1, pattern)|| match(str, pattern+2);
pattern的當前字元繼續匹配與跳過pattern的 『*』,二者只要有乙個匹配成功,即為匹配成功。
正規表示式 匹配
字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 class solutio...