zoukankan      html  css  js  c++  java
  • 10. Regular Expression Matching正则表达式

    Implement regular expression matching with support for '.' and '*'.

    '.' Matches any single character.
    '*' Matches zero or more of the preceding element.
    
    The matching should cover the entire input string (not partial).
    
    The function prototype should be:
    bool isMatch(const char *s, const char *p)
    
    Some examples:
    isMatch("aa","a") → false
    isMatch("aa","aa") → true
    isMatch("aaa","aa") → false
    isMatch("aa", "a*") → true
    isMatch("aa", ".*") → true
    isMatch("ab", ".*") → true
    isMatch("aab", "c*a*b") → true

    正则表达式,‘ . ’代表任意字符,‘ * ’跟在哪个字符后面,哪个字符就重复零次或多次。

    bool isMatch(const char *s, const char *p) 
    {   
        if (s == NULL || p == NULL) return false;      //s,p有其中一个为空,返回false。为空不包括‘’的情况
        if (*p == '') return *s == '';             //当p没有可匹配的字符,s必须为空
        if (*(p + 1) == '*')                           //当*(p+1)的第二个是‘*’
        {
            while ((*s != '' && *p == '.') || *s == *p)    
                                                       //此时匹配的是p为‘.*’,s可以为任意字符;或者p字符等于s字符
            {
                if (isMatch(s, p + 2)) return true;    //当*s=>'a',*p=>'.*a'或*s=>'a',p=>'b*a',直接让p=p+2,跳过'.*'或'b*'即*p='a'
                ++s;                                    //接着判断s的下一个字符
            }
            return isMatch(s, p + 2);
        }
        else if ((*s != '' && *p == '.') || *s == *p)  //当*(p+1)不等于‘*’
                                                         //两种情况:1、*p=='.',s可以为任意字符且不能为空。2、*s==*p
        {
            return isMatch(s + 1, p + 1);  
        }
        
        return false;
    }
     
  • 相关阅读:
    用Intellij idea创建Maven项目JDK8源码阅读环境问题整理
    咱的Maven项目能用Junit5吗?
    43- 8 mvc知识点
    42-7 linq
    (Ant编程) Iqueryable 类型介绍
    Iqueryable 类型中 的 使用lambda 注意的坑。 (linq to sql)
    (Ant编程) Linq 的select 方法
    Scala模式匹配
    scala正则表达式
    P4336 [SHOI2016]黑暗前的幻想乡
  • 原文地址:https://www.cnblogs.com/hozhangel/p/7797383.html
Copyright © 2011-2022 走看看