美文网首页
JZ-052-正则表达式匹配

JZ-052-正则表达式匹配

作者: 醉舞经阁半卷书 | 来源:发表于2022-01-10 23:06 被阅读0次

    正则表达式匹配

    题目描述

    请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含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()));
        }
    }
    

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

    相关文章

      网友评论

          本文标题:JZ-052-正则表达式匹配

          本文链接:https://www.haomeiwen.com/subject/kwivcrtx.html