題目描述:
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 匹配,...