一段动态规划代码赏析

简介: 输入一个字符串 和 一个pattern. 返回结果是否匹配上

输入一个字符串 和 一个pattern.  返回结果是否匹配上

    public static boolean isMatch(String str, String strPattern) {
        int countXing = 0;
        for (char c : strPattern.toCharArray())
            countXing++;
        if (strPattern.length() - countXing > str.length()) //说明s2去掉通配符,长度也长于s1
            return false;
        //动态规划设置初值
        boolean[][] dp = new boolean[strPattern.length() + 1][str.length() + 1];
        dp[0][0] = true;
        for (int i = 1; i <= strPattern.length(); i++) {
            char s2_char = strPattern.charAt(i - 1);
            dp[i][0] = dp[i - 1][0] && s2_char == '*'; //设置每次循环的初值,即当星号不出现在首位时,匹配字符串的初值都为false
            for (int j = 1; j <= str.length(); j++) {
                char s1_char = str.charAt(j - 1);
                if (s2_char == '*')
                    dp[i][j] = dp[i - 1][j] || dp[i][j - 1]; //动态规划递推式(星号) 表示星号可以匹配0个(决定于上次外循环的结果)或者多个(决定于刚才内循环的结果)
                else
                    dp[i][j] = dp[i - 1][j - 1] && (s2_char == '?' || s1_char == s2_char); //动态规划递推式(非星号) 表示dp值取决于上次的状态和当前状态
            }
        }
        return dp[strPattern.length()][str.length()];
    }
目录
相关文章
|
算法
代码随想录 Day26贪心算法01-上
代码随想录 Day26贪心算法01-上
50 1
|
6月前
【错题集-编程题】过河卒(动态规划-路径问题)
【错题集-编程题】过河卒(动态规划-路径问题)
|
6月前
|
存储 索引
【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战
【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战
|
算法
代码随想录算法训练营第二十九天 | 回溯算法总结
代码随想录算法训练营第二十九天 | 回溯算法总结
50 0
|
监控 算法
代码随想录 Day37 - 贪心算法(六)
代码随想录 Day37 - 贪心算法(六)
46 0
|
算法
代码随想录 Day35 - 贪心算法(四)
代码随想录 Day35 - 贪心算法(四)
42 0
|
算法
代码随想录 Day32 - 贪心算法(二)
代码随想录 Day32 - 贪心算法(二)
51 0
|
算法
代码随想录 Day31 - 贪心算法(一)
代码随想录 Day31 - 贪心算法(一)
49 0
|
算法
代码随想录 Day36 - 贪心算法(五)
代码随想录 Day36 - 贪心算法(五)
50 0
|
算法
代码随想录 Day34 - 贪心算法(三)
代码随想录 Day34 - 贪心算法(三)
65 0