10、Regular Expression Matching
正則表達式匹配
實現支持'.'和'*'的正則表達式匹配。
'.'匹配任意一個字母。
'*'匹配零個或者多個前面的元素。
匹配應該覆蓋整個輸入字符串,而不僅僅是一部分。
樣例isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "a*") → true
isMatch("aa", ".*") → true
isMatch("ab", ".*") → true
isMatch("aab", "c*a*b") → true
代碼:
class Solution {
public:
bool isMatch(string s,string p,int s_st,int p_st)
{
if(p_st==p.length())//有可能出現(a,aa*)的情況,所以先匹配p的長度
return s_st==s.length();
if(p[p_st+1]!='*')//下一元素不是*
{
if((s[s_st]!='\0'&&p[p_st]=='.')||s[s_st]==p[p_st])
return isMatch(s,p,s_st+1,p_st+1);
return false;
}
while((s[s_st]!='\0'&&p[p_st]=='.')||s[s_st]==p[p_st])
{//出現‘*’的情況
if(isMatch(s,p,s_st,p_st+2))return true;//跳過‘?*’查找
s_st++;//不匹配則s後移,繼續比對
}//s_st++遞增會影響非‘*'情況的匹配,所以‘*’情況應該後寫
return isMatch(s,p,s_st,p_st+2);//(aab,c*a*b)情況,直接跳過c*
}
bool isMatch(string s, string p) {
return isMatch(s,p,0,0);
}
};