給你乙個字串s和乙個字元規律p,請你來實現乙個支援 『.』 和 『*』 的正規表示式匹配。
『.』 匹配任意單個字元
『*』 匹配零個或多個前面的那乙個元素
所謂匹配,是要涵蓋整個字串 s的,而不是部分字串。
說明:s 可能為空,且只包含從 a-z 的小寫字母。
p 可能為空,且只包含從 a-z 的小寫字母,以及字元 . 和 *。
示例 1
:輸入:
s ="aa"
p ="a"
輸出:false
解釋:"a" 無法匹配 "aa" 整個字串。
示例 2
:輸入:
s ="aa"
p ="a*"
輸出:true
解釋: 因為 '*' 代表可以匹配零個或多個前面的那乙個元素, 在這裡前面的元素就是 'a'。因此,字串 "aa" 可被視為 'a' 重複了一次。
示例 3
:輸入:
s ="ab"
p =".*"
輸出:true
解釋:".*" 表示可匹配零個或多個('*')任意字元('.')。
示例 4
:輸入:
s ="aab"
p ="c*a*b"
輸出:true
解釋: 因為 '*' 表示零個或多個,這裡 'c' 為 0 個,
'a' 被重複一次。因此可以匹配字串 "aab"。
示例 5
:輸入:
s ="mississippi"
p ="mis*is*p*."
輸出:false
解這題需要把題意仔細研究清楚,反正我試了好多次才明白的。
首先,考慮特殊情況:
1>兩個字串都為空,返回true
2>當第乙個字串不空,而第二個字串空了,返回false(因為這樣,就無法
匹配成功了,而如果第乙個字串空了,第二個字串非空,還是可能匹配成
功的,比如第二個字串是「a*a*a*a*」,由於『*』之前的元素可以出現0次,
所以有可能匹配成功)
之後就開始匹配第乙個字元,這裡有兩種可能:匹配成功或匹配失敗。但考慮到pattern
下乙個字元可能是『*』, 這裡我們分兩種情況討論:pattern下乙個字元為『*』或
不為『*』:
1>pattern下乙個字元不為『*』:這種情況比較簡單,直接匹配當前字元。如果
匹配成功,繼續匹配下乙個;如果匹配失敗,直接返回false。注意這裡的
「匹配成功」,除了兩個字元相同的情況外,還有一種情況,就是pattern的
當前字元為『.』,同時str的當前字元不為『\0』。
2>pattern下乙個字元為『*』時,稍微複雜一些,因為『*』可以代表0個或多個。
這裡把這些情況都考慮到:
a>當『*』匹配0個字元時,str當前字元不變,pattern當前字元後移兩位,
跳過這個『*』符號;
b>當『*』匹配1個或多個時,str當前字元移向下乙個,pattern當前字元
不變。(這裡匹配1個或多個可以看成一種情況,因為:當匹配乙個時,
由於str移到了下乙個字元,而pattern字元不變,就回到了上邊的情況a;
當匹配多於乙個字元時,相當於從str的下乙個字元繼續開始匹配)
之後再寫**就很簡單了。
class
solution
char
str=s.
tochararray()
;char
pattern=p.
tochararray()
;return
match
(str,
0, pattern,0)
;}public
boolean
match
(char
str,
int i,
char
pattern,
int j)
//下乙個字元是"*",匹配0個字元後移2位,匹配1個字元或多個字元,str後移一位,pattern不變
if(j1&&pattern[j+1]
=='*'
)else
}//下乙個不是「*」,當前匹配
if(str.length != i &&
(str[i]
== pattern[j]
|| pattern[j]
=='.'))
return
match
(str,i +
1,pattern,j +1)
;return
false;}
}
正規表示式 匹配
字串 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...