題目描述
請實現乙個函式用來匹配包括』.『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配。
思路:這個題很考驗分析能力,確實有很多中情況需要討論
》特殊情況:
1、兩個字串都是空,則返回true
2、第乙個字串str不為空,而模式字串pattern為空,直接返回false
3、str為空,pattern不為空,有可能匹配成功,因為比如str="";而pattern=「ab」,可以匹配成功;
》開始匹配
1、pattern的下乙個字元不為*,直接將str的當前字元與pattern的當前字元匹配匹配成功的情況(a.兩者當前字元一樣 b.str當前不是『\0』和pattern當前是『.』),匹配成功返回true,否則就返回false;
2.pattern的下一字元為*,可以匹配0個或者乙個或者多個,分情況:
a.匹配0個,則str當前字元不變,pattern向後移動兩個,跳過
b.匹配乙個或者多個,這裡將乙個或者多個可以視為一種情況,匹配乙個時,str移向下乙個字元,pattern當前字元不變,相當於回到了情況a,而匹配多個時,也是str移向下乙個字元,pattern不變,繼續從下一字元開始匹配。
實現:c++
class solution if(
*str==
'\0'
&&*pattern==
'\0'
)//匹配完了if(
*str!=
'\0'
&&*pattern==
'\0'
)//第乙個不為空,第二個為空if(
*(pattern+1)
=='*'
)//下乙個字元為*
else}if
(*str==
*pattern||
(*pattern==
'.'&&
*str!=
'\0'))
//pattern的下一字元不為*
return false;}}
;
finished!!! 劍指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 均不匹配.分析 觀察模式串中第...