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

    题目描述

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

    aaa a*aaa
    abbbc ab*c
    abc ab*c
    abcaaab a.*a.b

     
    解题思路:
    问题的核心在于对“*”的情况分析。
    如果当前字符的下一个字符不是“*”,那么如果当前字符不匹配就返回失败,否则递归下一个字符位置。
    如果当前字符的下一个字符是“*”,那么需要考虑两种情况:1.匹配0个,不管当前字符是否相同,都需要pattern+2向后走2个字符; 2.匹配一个或者匹配多个,那么当前字符肯定是相同的,我们让str+1向后走1个字符,匹配一个的就变成匹配0个的情况,匹配多个的只需要一直向后匹配即可。
    class Solution {
    public:
        bool match(char* str, char* pattern)
        {
            //同时走到尾部表示匹配成功
            if(*str == '' && *pattern == '')
                return true;
            //如果字符串没有结束,模式串结束了,则表示匹配失败
            //如果模式串没有结束,而字符串结束了,那么还有可能是匹配0个的情况存在
            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 == '.' ) ){
                    //即使当前字符相同,也可以匹配0个
                    bool matchZero = match(str, pattern+2);
                    //匹配一个和多个算是一种情况,匹配一个在下次递归中会转化成匹配0次的情况
                    bool matchOneMulti = match(str+1, pattern);
                    return matchZero || matchOneMulti;
                }else{
                    //匹配0个的情况
                    return match(str, pattern+2);
                }
            }
        }
    }
    

      

  • 相关阅读:
    【转】CUDA5/CentOS6.4
    【转】centos 6.4 samba 安装配置
    【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
    【转】Getting xrdp to work on CentOS 6.4
    【VLFeat】使用matlab版本计算HOG
    Unofficial Windows Binaries for Python Extension Packages
    March 06th, 2018 Week 10th Tuesday
    March 05th, 2018 Week 10th Monday
    March 04th, 2018 Week 10th Sunday
    March 03rd, 2018 Week 9th Saturday
  • 原文地址:https://www.cnblogs.com/chengsheng/p/10694838.html
Copyright © 2011-2022 走看看