——Regular Expression Matching

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章