您的位置:首页 > 其它

<10>——Regular Expression Matching

2017-09-03 11:44 323 查看

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);
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息