• [剑指offer] 52. 正则表达式匹配


    题目描述

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

    思路:
    当匹配模式的i+1位不是" * "时:
      直接判断str[i]和str[i+1]是否匹配(1. 直接相等,2. pattern[i]是" . ")
      若匹配,则继续判断str[i+1] 和 pattern[i+1]
      否则返回false.  
     
    当匹配模式的i+1位是" * "时:
      同样判断str[i]和str[i+1]是否匹配
      若匹配,则有:
        情况A *匹配0位:继续判断str[i] 和 pattern[i+2] (跳过 “*”号)
        情况B *匹配1到多位: 继续判断str[i+1] 和 pattern[i]  (匹配1到多位)
       否则判断str[i] 和 pattern[i+2] (跳过 “*”号以及其之前的字符)
      
    class Solution
    {
      public:
        bool match(char *str, char *pattern)
        {
            if (*str == '' && *pattern == '')
                return true;
            if (*str != '' && *pattern == '')
                return false;
    
            if (*(pattern + 1) != '*')
            {
                if (*str == *pattern || (*str != '' && *pattern == '.'))
                    return match(str + 1, pattern + 1);
                else
                    return false;
            }
            else
            {
                if (*str == *pattern || (*str != '' && *pattern == '.'))
                    return match(str, pattern + 2) || match(str + 1, pattern);
                else
                    return match(str, pattern + 2);
            }
        }
    };
  • 相关阅读:
    Chapter 12 homework
    copy construction note
    Chapter 11 homework
    数组排序最大元素
    temporary Object and destructor
    strcpy() 函数注意的地方
    结对项目第二次作业
    结队项目——第一次作业
    软件工程实践2017第二次作业
    软件工程实践2017第一次作业
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/10193331.html
Copyright © 2020-2023  润新知