热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

算法正则表达式匹配详解编程语言

*[正则表达式匹配]        [题目]请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示
/*
	[正则表达式匹配]
    
    [题目]
	请实现一个函数用来匹配包括'.'和'*'的正则表达式。
	模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 
	在本题中,匹配是指字符串的所有字符匹配整个模式。
	例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
    
    [解析]
    题目不难,但一定要细心分析完所有可能的情况。在分析过程中可以借助自动机做图,
    理清状态变换之间的关系。注意考虑边界条件。bug free 还是很难,理清思路再写代码。

*/

#include 
#include 
#include 
#include 

using namespace std;

class Solution{
public:
    bool match(char* str, char* pattern){
        if(str == NULL || pattern == NULL)
            return false;

        return matchRecursive(str, pattern);
    }

    bool matchRecursive(char* str, char* pattern){
        // str and pattern to the end at the same time
        if(*str == '/0' && *pattern == '/0')
            return true;

        // pattern have been exhaust
        if(*str != '/0' && *pattern == '/0')
            return false;

        // note: until now, pattern must not be the last one
        if(*(pattern+1) == '*'){
            if(*pattern == *str || (*pattern=='.' && *str != '/0')){
                // match
                return matchRecursive(str+1, pattern) 
                    || matchRecursive(str+1, pattern+2)
                    || matchRecursive(str, pattern+2); 
            }else{
                // don't match
                return matchRecursive(str, pattern+2);
            }
        }else{
            if(*pattern == *str || (*pattern=='.' && *str != '/0')){
                // match
                return matchRecursive(str+1, pattern+1);
            }else{
                return false;
            }
        }
    }
};

int main()
{
    return 0;
}


推荐阅读
author-avatar
yf_992258
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有