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

来源:互联网 发布:微交易源码 编辑:程序博客网 时间:2024/06/03 17:51

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

思路:情况非常复杂,利用递归思路,可以大大简化问题。其实,递归就是一步一步解决问题。

当拿到一个字符串str和模式串pattern,如果下一个为*,则有三种情况,匹配0个,匹配一个,匹配两个及两个以上。

如果下一个不为*,则直接匹配一个。

#include <iostream>#include <cstdio>#include <stack>#include <vector>#include <algorithm>#include <list>using namespace std;class Solution {public:    bool match(char* str, char* pattern)    {       if(str == NULL || pattern == NULL)           return false;//如果为空指针,则返回false        return matchCore(str,pattern);    }    bool matchCore(char* str,char* pattern){        //有效性检验:str到尾,pattern到尾,匹配成功        if(*str == '\0' && *pattern == '\0')            return true;        //pattern先到尾,匹配失败        if(*str == '\0' && *pattern != '\0')            return false;        if(*str != '\0' && *pattern == '\0')            return false;                if(*(pattern + 1) == '*'){            if(*str == *pattern ||  *pattern == '.')                return matchCore(str + 1,pattern) ||                 matchCore(str, pattern + 2) || matchCore(str + 1, pattern + 2);            else                return matchCore(str, pattern + 2);        }        if(*str == *pattern ||  *pattern == '.')            return matchCore(str + 1,pattern + 1);        return false;    }};int main(){char* s1 = ",";char* s2 = ".*";Solution s;bool bResult = s.match(s1,s2);    return 0;}


 

阅读全文
0 0
原创粉丝点击