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

    正则表达式匹配

    题目描述

    请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。

    • 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。

    题目链接: 正则表达式匹配

    代码

    /**
     * 标题:正则表达式匹配
     * 题目描述
     * 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。
     * 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
     * 题目链接:
     * https://www.nowcoder.com/practice/45327ae22b7b413ea21df13ee7d6429c?tpId=13&&tqId=11205&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
     */
    public class Jz52 {
    
        public boolean match(char[] str, char[] pattern) {
            int m = str.length, n = pattern.length;
            boolean[][] dp = new boolean[m + 1][n + 1];
    
            dp[0][0] = true;
            for (int i = 1; i <= n; i++) {
                if (pattern[i - 1] == '*') {
                    dp[0][i] = dp[0][i - 2];
                }
            }
    
            for (int i = 1; i <= m; i++) {
                for (int j = 1; j <= n; j++) {
                    if (str[i - 1] == pattern[j - 1] || pattern[j - 1] == '.') {
                        dp[i][j] = dp[i - 1][j - 1];
                    } else if (pattern[j - 1] == '*') {
                        if (pattern[j - 2] == str[i - 1] || pattern[j - 2] == '.') {
                            dp[i][j] |= dp[i][j - 1];
                            dp[i][j] |= dp[i - 1][j];
                            dp[i][j] |= dp[i][j - 2];
                        } else {
                            dp[i][j] = dp[i][j - 2];
                        }
                    }
                }
            }
    
            return dp[m][n];
        }
    
        public static void main(String[] args) {
            Jz52 jz52 = new Jz52();
            System.out.println(jz52.match("aaa".toCharArray(), "a*a".toCharArray()));
        }
    }
    

    【每日寄语】 请你再悄悄地努力一下,但愿有一天你可以说出那句话,我终于成为了不负众望的人了。

  • 相关阅读:
    VBA实现任意n阶幻方的一种填法(n≥3)
    业余兼职的全行业薪酬对照(发表者: swf11519 )
    在VBA中获取“我的文档”的目录路径
    应用API函数在用户窗体中画圆
    双色球历史数据
    一沙一世界(10亿光年),科学的图文介绍
    四阶素数幻方问题
    Android_左右滑动切换背景
    深圳中软实习始末
    Android系统Surface机制的SurfaceFlinger服务的启动过程分析
  • 原文地址:https://www.cnblogs.com/kaesar/p/15786439.html
Copyright © 2011-2022 走看看