正規表示式 匹配 劍指offer

2021-08-25 09:02:40 字數 858 閱讀 3878

今天剛剛刷完劍指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 均不匹配.分析 觀察模式串中第...