动态规划算法leetcode.44

该博客探讨了一种使用动态规划解决字符串匹配问题的方法。通过建立一个二维布尔数组,记录了字符串`s`的前`i`个字符与模式字符串`p`的前`j`个字符是否匹配的情况。特别地,处理模式串中的通配符'*',允许它匹配零个或多个字符。在遍历字符串的过程中,判断当前字符是否匹配,逐步填充动态规划数组。最后返回`s`和`p`是否完全匹配的结果。
摘要由CSDN通过智能技术生成
 public boolean isMatch(String s, String p) {
        int m = s.length();
        int n = p.length();
        boolean[][] dp = new boolean[m + 1][n + 1];//s的前i个与p的前j个是否匹配
        dp[0][0] = true;
        //s的头部空字符串可以匹配p前面的连续'*'
        for (int i = 0; i < n; i++) {
            if(p.charAt(i)=='*')
                dp[0][i+1]=dp[0][i];
        }
        //遍历s和p的每个字符
        for (int i = 0; i < m; i++) {
            for (int j = 0; j <n ; j++) {
                //对于s中每个字符,'*'可以不匹配,也可以匹配一个
                if(p.charAt(j)=='*')
                    dp[i+1][j+1]=dp[i+1][j]||dp[i][j+1];
                else if(p.charAt(j)=='?'||p.charAt(j)==s.charAt(i))
                    dp[i+1][j+1]=dp[i][j];
            }
        }
        return dp[m][n];
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值