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

    题目

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

    思路

    要分两种情况:

    • 匹配串的下一位是*

         匹配成功, 字符串当前位置字符与匹配串当前字符相同    或   字符串当前位置字符不为空字符匹配串当前字符为'.' 则两串的移动有如下选择

    1. 字符串向后移动一个位置,匹配串向后移动两个位置,从下一状态开始新的匹配
    2. 字符串向后移动一个位置,匹配穿不移动,因为匹配串的下一位置是'*',代表有任意多个当前字符,所以可不移动
    3. 字符串不动,匹配串向后移动俩个位置,这是忽略*和它前面的字符(也就是不算当前匹配成功开始下一次新的匹配)

         匹配不成功

    1. 字符串不动,匹配串向后移动俩个位置,这是忽略*和它前面的字符
    • 匹配串的下一位不是*

         匹配成功, 字符串当前位置字符与匹配串当前字符相同    或   字符串当前位置字符不为空字符匹配串当前字符为'.' 

    1. 字符串和匹配串都向后移动一个位置

        匹配不成功

    1. 返回false
    class Solution {
    public:
        bool match(char* str, char* par)
        {
            if(*str==''&&*par=='')
                return true;
            if(*str!=''&&*par=='')
                return false;
            
            if(*(par+1)=='*')
            {
                if(*str==*par||(*par=='.'&&*str!=''))
                    return match(str+1,par+2)||match(str,par+2)||match(str+1,par);
                return match(str,par+2);
            }
    
            if(*str==*par||(*par=='.'&&(*str)!=''))
                return match(str+1,par+1);
            return false;
        }
    };
  • 相关阅读:
    CSS中position小解
    position
    mac默认安装postgresql, 如何让postgresql可以远程访问
    The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0.
    active admin gem error
    psql 无法添加超级用户
    ubuntu 15.04 安装Balsamiq Mockups 3
    Rails html 写public里图片的路径
    rails c 历史命令
    undefined local variable or method `per' for []:ActiveRecord::Relation
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10152927.html
Copyright © 2011-2022 走看看