加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式匹配(递归+剑指offer)

发布时间:2020-12-14 00:57:04 所属栏目:百科 来源:网络整理
导读:正则表达式匹配 参与人数:660 时间限制:1秒 空间限制:32768K 通过比例:14.97% 最佳记录:0 ms|8552K (来自高鹏) 题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(
正则表达式匹配
  • 参与人数:660时间限制:1秒空间限制:32768K
  • 通过比例:14.97%
  • 最佳记录:0 ms|8552K(来自高鹏)

题目描述

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


链接:http://www.nowcoder.com/practice/45327ae22b7b413ea21df13ee7d6429c?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题意:点可以表示任意字符,星*表示前一个字符可以出现0--n次,那么用递归来解,条件是str串和pattern串到达结尾,或者str串结尾了,pattern串没有结尾,都退出。

而递归的条件是:遇到*,则三个出口,(str+1,pattern+2),(str+1,(str,pattern);


遇到'.' (str+1,pattern+1);


#include<cstdio>
using namespace std;
class Solution {
public:
    bool match(char* str,char* pattern)
    {
//        puts(str);
//        puts(pattern);
        if(str==NULL && pattern==NULL)
            return true;
        if(str==NULL || pattern==NULL)
            return false;
        return matchCore(str,pattern);
    }
    bool matchCore(char *str,char *pattern)
    {
        if(*str=='' && *pattern=='') {return true;}
        if(*str!='' && *pattern=='') return false;
        if(*(pattern+1)=='*')
        {
            if(*str==*pattern || (*pattern=='.'&&*str!=''))
            {
                //move on the next state
                return matchCore(str+1,pattern+2)
                //stay on the current state
                || matchCore(str+1,pattern)
                //ignore a '*'
                || matchCore(str,pattern+2);
            }
            else return matchCore(str,pattern+2);
        }
        if(*str==*pattern||(*pattern=='.'&&*str!=''))
        {
            return matchCore(str+1,pattern+1);
        }
        return false;
    }
};
int main()
{
    char ch1[]="";
    char ga1[]="";
    char *ch=ch1;
    char *ga=ga1;
    Solution so;
    if(so.match(ch,ga))printf("truen");
    else printf("falsen");
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读