請實現乙個函式用來匹配包括』.『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配。
分四種情況考慮:
1.字串為空,模式串為空,–>匹配
2.字串為空,模式串不為空,需要對模式串進行判斷,如果模式串的長度是1,肯定匹配不成功;如果模式串類似於「.*」就會匹配成功
3.字串不為空,模式串為空, -->不匹配
4.字串不為空,模式串不為空,從後往前判斷,特別注意幾種特殊的情況:模式串由乙個"."和乙個"星號"組成時(意味著字串中可以是任意個任意字元),和所有的字串都匹配;星號前面的字元和當前位置的字串前的所有字元都匹配。
#include
using
namespace std;
bool
match
(char
* str,
char
* pattern)
else}}
else
else
else
if(pattern[j]
=='*'
)while
(str[i]
==pattern[j])if
(i<0)
//*前面的字元和str中的字元都匹配,「aaa」,"aa*"
return
true
; j--;}
else
if(pattern[j]
=='.'
)else}if
(i==-1
&&j==-1
)return
true
;else
return
false;}
}}intmain()
用遞迴實現
基本思想
依然是分成四種情況進行處理
1.str和模式串均為空時,返回true
2.str為空,模式串非空時,需要考慮pattern中第二個字元為*的情況,pattern後移兩位
3.str非空,模式為空時,返回false
4.均非空的時候,如果pattern的第二個字元為星號,需要分情況討論。
完整**
#include
using
namespace std;
//遞迴實現
bool
match
(char
* str,
char
* pattern)}if
(ls!=
0&&lp==0)
return
false;if
(ls!=
0&&lp!=0)
}else
else}}
}int
main()
二刷
遞迴思想:
class
solution
elseif(
strlen
(str)==0
)//兩串都不為空的情況if(
(str[0]
==pattern[0]
||pattern[0]
=='.'
)&&pattern[1]
!='*'
)else
else
else
if(str[0]
==pattern[0]
||pattern[0]
=='.'
)else
return
false;}
}}};
劍指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 均不匹配.分析 觀察模式串中第...