正则表达式匹配

女生的网名这么多〃 提交于 2020-01-08 05:40:27

题目描述

请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含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;
    }
};
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!