面試題 程式設計 正規表示式匹配

2021-08-25 17:34:24 字數 1330 閱讀 3003

題目描述:

jobdu最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,「student. a am i」。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是「i am a student.」。cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?

思路:

接下來我們討論針對這個題目的思路:

首先,考慮特殊情況:

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

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

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

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

所以有可能匹配成功)

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

不為『*』:

匹配成功,繼續匹配下乙個,pattern和字串都向後移動乙個字元;如果匹配失敗,直接返回

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

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

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

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

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

跳過這個『*』符號;

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

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

由於字串str移到了下乙個字元,而pattern字元不變;當匹配多於乙個字元時,相當於

從str的下乙個字元繼續開始匹配,pattern向後移動乙個字元)

下面是我在牛客網編譯測試通過的:

class solution 

bool matchcore(char* str, char* pattern)

else if(*str==*pattern||(*pattern=='.'&&*str!='\0'))//pattern的下乙個不是『*』,如果匹配,字串和模式串都向後移動乙個字元

return matchcore(str+1,pattern+1);

return false;

}};

面試題53 正規表示式匹配

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

面試題53 正規表示式匹配

當模式中的第二個字元不是 時 1 如果字串第乙個字元和模式中的第乙個字元相匹配,那麼字串和模式都後移乙個字元,然後匹配剩餘的。2 如果 字串第乙個字元和模式中的第乙個字元相不匹配,直接返回false。而當模式中的第二個字元是 時 如果字串第乙個字元跟模式第乙個字元不匹配,則模式後移2個字元,繼續匹配...

面試題 正規表示式的匹配

今天看到這樣乙個題,實現字串的模式匹配,具體題目如下 請實現乙個函式來匹配包括 和 的正規表示式,其中匹配是指字串的所有字元匹配整個模式串。具體匹配規則如下 模式串中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,...