首页 > 其他 > 详细

剑指offer之正则表达式匹配

时间:2021-03-02 11:03:26      阅读:35      评论:0      收藏:0      [点我收藏+]

题目要求

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

示例

示例1:

输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。

示例2:

输入:
s = "aa"
p = "a*"
输出: true
解释: 因为 ‘*‘ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 ‘a‘。因此,字符串 "aa" 可被视为 ‘a‘ 重复了一次。

示例3:

输入:
s = "ab"
p = ".*"
输出: true
解释: ".*" 表示可匹配零个或多个(‘*‘)任意字符(‘.‘)。

题解

class Solution {
    public boolean isMatch(String s, String p) {
        // 这道题比较难做,主要是因为不好判断*所配置的字符是几个的问题
        // 这道题最后的解法是使用动态规划进行解题,但是我还是看的有点迷糊了
        int m = s.length() + 1, n = p.length() + 1;
        if(s == null && p == null) return true;
        boolean dp[][] = new boolean[m][n];
        dp[0][0] = true;    // 表示s与p都为空时,匹配成功
        // 初始化条件
        for(int i=2; i<n; i+= 2){
            dp[0][i] = dp[0][i-2] && p.charAt(i - 1) == ‘*‘; 
        }

        // 状态转移
        for(int i=1; i<m; i++ ){
            for(int j=1; j<n; j++){
                if(p.charAt(j-1) == ‘*‘){
                    // if(dp[i][j-1]) dp[i][j] = true; // 匹配无数次
                    // else if(dp[i][j-2]) dp[i][j] = true;    // 匹配0次
                    // else if(dp[i-1][j] && s.charAt(i-1) == p.charAt(j - 2)) dp[i][j]=true;  // 匹配1次
                    // else if(dp[i-1][j] && p.charAt(j-2) == ‘.‘) dp[i][j]=true;  // 匹配1次

                    if(dp[i][j-2] || dp[i][j-1]) dp[i][j] = true;   //匹配0次或者匹配1次
                    else if(s.charAt(i-1) == p.charAt(j-2) || p.charAt(j-2) == ‘.‘) dp[i][j]=dp[i-1][j];     // 匹配无数次
                }else{
                    if(dp[i-1][j-1] && s.charAt(i-1) == p.charAt(j-1)) dp[i][j]=true;
                    else if(dp[i-1][j-1] && p.charAt(j-1) == ‘.‘) dp[i][j]=true;
                }
            }
        }

        return dp[m-1][n-1];
    }

}

剑指offer之正则表达式匹配

原文:https://www.cnblogs.com/liulongtao/p/14467525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!