zoukankan      html  css  js  c++  java
  • 正则表达式匹配

    正则表达式匹配

    题目描述

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

    剑指offer版

    class Solution {
    public:
        bool matchCore(char* str, char* pattern) {
            if ((*str == '') && (*pattern == ''))    // 都比较到最后一个字符时
                return true;
            if ((*str != '') && (*pattern == ''))    // str没有结束, 但pattern结束时
                return false;
            
            if (*(pattern + 1) == '*') {        // 第二个字符是*
                if ((*str == *pattern) || (*str != '' && *pattern == '.'))    // 匹配一个字符
                    return matchCore(str+1, pattern)        //匹配到1个字符, 模式不变, 如"aa","a*"
                        || matchCore(str, pattern+2);      // 匹配到0个字符, 模式+2,   如"bbbba",".*a*a"
                        //|| matchCore(str+1, pattern+2);    // 发现这个可以注释掉
                else        // 没有匹配到字符
                    return matchCore(str, pattern+2);
            }
            
            if ((*str == *pattern) || (*str != '' && *pattern == '.'))    // 第二个字符不是*
                return matchCore(str+1, pattern+1);
            
            return false;
        }
        
        bool match(char* str, char* pattern)
        {
            if ((str == nullptr) || (pattern == nullptr))
                return false;
            return matchCore(str, pattern);
        }
    };
    
  • 相关阅读:
    LeetCode Ugly Number
    LeetCode Missing Number
    拓扑排序
    不相交集的求并算法(按集合大小求并+按高度求并)
    数据结构排序总结
    基数排序
    java 发展简史
    java 白皮书的关键术语
    包+类导入+静态导入+类放入包中+包作用域
    关于二叉堆(优先队列)的其他操作及其应用
  • 原文地址:https://www.cnblogs.com/hesper/p/10548460.html
Copyright © 2011-2022 走看看