牛客網 正規表示式匹配

2021-08-16 07:10:57 字數 1123 閱讀 7157

給出匹配串,給出模式串。

給出兩種正則運算,乙個是.(點)表示佔位代表任意乙個字元,乙個是字元*(例如a*)代表此處可以有任意個*前面的字元。

一開始想著是正著慢慢模擬,但是顯然不可行,正著做顯然是直接使用了前面的字元,而每次特殊判斷字元後是不是*號過於複雜。第二個想著是倒著匹配,碰到*號了往新串中新增字元,然後觀察時候可以構造出乙個與原串相同的字元,但是也失敗了,因為無法控制個數,例如abaaaa,匹配abaa*a,不好控制。

最後是看著討論的,貼上裡邊的**,作為學習使用。用的是遞迴分類。

非常好的**。

/*    解這題需要把題意仔細研究清楚,反正我試了好多次才明白的。

首先,考慮特殊情況:

1>兩個字串都為空,返回true

2>當第乙個字串不空,而第二個字串空了,返回false(因為這樣,就無法

匹配成功了,而如果第乙個字串空了,第二個字串非空,還是可能匹配成

功的,比如第二個字串是「a*a*a*a*」,由於『*』之前的元素可以出現0次,

所以有可能匹配成功)

之後就開始匹配第乙個字元,這裡有兩種可能:匹配成功或匹配失敗。但考慮到pattern

不為『*』:

匹配成功,繼續匹配下乙個;如果匹配失敗,直接返回false。注意這裡的

「匹配成功」,除了兩個字元相同的情況外,還有一種情況,就是pattern的

當前字元為『.』,同時str的當前字元不為『\0』。

2>pattern下乙個字元為『*』時,稍微複雜一些,因為『*』可以代表0個或多個。

這裡把這些情況都考慮到:

a>當『*』匹配0個字元時,str當前字元不變,pattern當前字元後移兩位,

跳過這個『*』符號;

b>當『*』匹配1個或多個時,str當前字元移向下乙個,pattern當前字元

不變。(這裡匹配1個或多個可以看成一種情況,因為:當匹配乙個時,

由於str移到了下乙個字元,而pattern字元不變,就回到了上邊的情況a;

當匹配多於乙個字元時,相當於從str的下乙個字元繼續開始匹配)

之後再寫**就很簡單了。

*/class solution

//if the next character is '*'

else}};

牛客網 正規表示式匹配(字串)

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

牛客網 (標星)正規表示式的匹配

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

牛客網劍指offer之正規表示式匹配

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