正则表达式匹配

题目描述

请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配

代码

class Solution {
    
public:
    bool match(char* str, char* pattern)
    {
    	return match(str, 0, pattern, 0);
    }
    
    bool match(char* str, int s, char* pat, int p)
    {
    	if (!str[s] && !pat[p]) {//匹配
            return true;
        }
        if (!pat[p]) {//模式串结束不匹配
            return false;
        }
        
        if (pat[p + 1]) {
            if (pat[p + 1] == '*') {
                bool f = false;;
                if (str[s] && (str[s] == pat[p] || pat[p] == '.')) {
                    f = match(str, s + 1, pat, p + 2) //*匹配一次
                    	|| match(str, s + 1, pat, p); //*匹配多次
                } 
                return f || match(str, s, pat, p + 2);//*不匹配
                
            }
        }
        if (!str[s]) {//不匹配
            return false;
        }
        if (str[s] == pat[p] || pat[p] == '.') {
            return match(str, s + 1, pat, p + 1);
        }
        return false;
    }
};

posted on 2017-03-22 10:50  jec  阅读(152)  评论(0编辑  收藏  举报

导航