今天剛剛刷完劍指offer,感覺這道題蠻有意思的就記記筆記。
思路:主要考量*這個字元,然後還是通過動態規劃的思路往前走(或者說貪婪匹配方式)。
首先判斷pattern串是否為空,這裡利用了c語言的空字串為』\0』來判斷。
if(*pattern=='\0')
,整體狀態就由str=='\0'
(空否)決定。
if(*pattern!='\0')
,此時字串至少還有2個字元(末尾有\0
證),而由於*
可以匹配多個字元模式,因此我們優先考慮下乙個字元。
if(*(pattern+1) != '*')
則問題首先取決於當前兩個字元相等於否(或者pattern是否等於 『.』),不符合直接return false; 滿足問題又可轉換為match(str+1, pattern+1);
if(*(pattern+1) == '*')
則問題同上也判斷當前兩個字元相等於,不符合的話直接跨過2個字元的pattern(因為*
可以匹配
≥ ≥
0個數)。若當前的字元相等,問題又轉換為三種情況
貪婪匹配這個字元,這樣可以讓str走的更遠
僅匹配該字元,之後跳過這個匹配模式(pattern+2)
直接跳過該匹配模式,適用於(str="abca", pattern="abca*a"
),第一次做沒考慮到這一點,沒有ac。
**如下~
劍指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 均不匹配.分析 觀察模式串中第...