zoukankan      html  css  js  c++  java
  • isMatch

    10. 正则表达式匹配
    给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
    
    '.' 匹配任意单个字符
    '*' 匹配零个或多个前面的那一个元素
    所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
    
    说明:
    
    s 可能为空,且只包含从 a-z 的小写字母。
    p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。
    示例 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 = "c*a*b"
    输出: true
    解释: 因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。
    示例 5:
    
    输入:
    s = "mississippi"
    p = "mis*is*p*."
    输出: false
    
    public boolean isMatch(String s, String p) {
            boolean[][] dp = new boolean[s.length()+1][p.length()+1];
            dp[0][0] = true;
            // dp[0][1]为0
            for(int k = 2; k <= p.length(); k++){
                // #* 匹配0个或多个,每两个可以匹配1次
                // 例如k=2的时候,p的第二个字符是*,所以可以匹配0次,也就是s为空, p为(#*) (#表示任意字符)
                dp[0][k] =  p.charAt(k-1) == '*' && dp[0][k-2];
            }
    
            for(int i = 0; i < s.length(); i++){
                for(int j = 0; j < p.length(); j++){
                    if(p.charAt(j) == '*'){
                        dp[i+1][j+1] = dp[i+1][j+1-2] || (dp[i][j+1] && match(s, p , i, j-1));
                    }else{
                        dp[i+1][j+1] = dp[i+1-1][j+1-1] && match(s, p, i, j);
                    }
                }
            }
    
            return dp[s.length()][p.length()];
        }
    
        public boolean match(String s, String p, int i, int j){
            return s.charAt(i) == p.charAt(j) || p.charAt(j) == '.';
        }
    
  • 相关阅读:
    python 实现redis订阅发布功能
    python装饰器实现对异常代码出现进行监控
    回首2017 展望2018
    结合jira搭建自动化测试平台
    安装YApi 接口管理平台
    Django 连接mysql数据库中文乱码
    在django admin中添加自定义视图
    django 模型models
    用户行为分析数据库设计
    vCenter Server 6 Standard
  • 原文地址:https://www.cnblogs.com/athony/p/13093417.html
Copyright © 2011-2022 走看看