<10>——Regular Expression Matching

来源:互联网 发布:淘宝怎么卖二手手机 编辑:程序博客网 时间:2024/06/11 23:12

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



原创粉丝点击