美文网首页
【leetcode C语言实现】剑指 Offer 19. 正则表

【leetcode C语言实现】剑指 Offer 19. 正则表

作者: sunshine_hanxx | 来源:发表于2020-07-16 21:41 被阅读0次

    题目描述

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

    示例 1:

    输入:
    s = "aa"
    p = "a"
    输出: false
    解释: "a" 无法匹配 "aa" 整个字符串。
    示例 2:

    输入:
    s = "aa"
    p = "a"
    输出: true
    解释: 因为 '
    ' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。
    示例 3:

    输入:
    s = "ab"
    p = "."
    输出: true
    解释: ".
    " 表示可匹配零个或多个('*')任意字符('.')。
    示例 4:

    输入:
    s = "aab"
    p = "cab"
    输出: true
    解释: 因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。
    示例 5:

    输入:
    s = "mississippi"
    p = "misisp*."
    输出: false
    s 可能为空,且只包含从 a-z 的小写字母。
    p 可能为空,且只包含从 a-z 的小写字母以及字符 . 和 ,无连续的 ''。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof

    解题思路

    本题需对匹配字符串和匹配模式进行逐一分析,可采用动态规划方法。当第二个字符为‘*’时,情况较为复杂,需要对各种情况进行考虑。

    代码

    
    bool matchFunc(char* s, char *p)      
    {
        if((*s == '\0') && (*p == '\0')) // 匹配字符串和匹配模式都为空
            return true;
    
        if((*s != '\0') && (*p == '\0')) // 匹配字符串不为空,匹配模式为空
            return false;
    
        if(*(p + 1) == '*')
        {
            if((*p == *s) || ((*p == '.') && (*s != '\0')))
            {
                return matchFunc(s + 1, p + 2) || matchFunc(s + 1, p) || matchFunc(s, p + 2);
            }
            else
            {
                return matchFunc(s, p + 2);
            }
        }
    
        if((*s == *p) || ((*p == '.') && (*s != '\0')))
            return matchFunc(s + 1, p + 1);
    
        return false;
    }
    
    bool isMatch(char* s, char* p){
        if((s == NULL) || (p == NULL)) // 若指向匹配字符串或匹配模式的为空指针,则返回false
            return false;
    
        return matchFunc(s, p);
    }
    

    执行结果

    相关文章

      网友评论

          本文标题:【leetcode C语言实现】剑指 Offer 19. 正则表

          本文链接:https://www.haomeiwen.com/subject/oaamhktx.html