一段动态规划代码赏析

简介: 输入一个字符串 和 一个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()];
    }
目录
相关文章
|
3月前
|
存储 索引
【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战
【冲击蓝桥篇】动态规划(下):你还在怕动态规划!?进来!答题模板+思路解析+真题实战
|
9月前
|
算法
代码随想录算法训练营第四十六天 | LeetCode 139. 单词拆分、多重背包、背包总结
代码随想录算法训练营第四十六天 | LeetCode 139. 单词拆分、多重背包、背包总结
64 1
|
9月前
|
算法
代码随想录算法训练营第二十四天 | LeetCode 77.组合
代码随想录算法训练营第二十四天 | LeetCode 77.组合
76 0
|
9月前
|
算法
代码随想录算法训练营第二十九天 | 回溯算法总结
代码随想录算法训练营第二十九天 | 回溯算法总结
41 0
(思维)(必要做题步骤)(皮卡丘与 Codeforces )D - 先来签个到
(思维)(必要做题步骤)(皮卡丘与 Codeforces )D - 先来签个到
87 0
|
算法 测试技术
动态规划真的有那么抽象吗?(递推算法还是动态规划别傻傻分不清了) 以正确的姿势学习动态规划 (入门篇)
动态规划真的有那么抽象吗?(递推算法还是动态规划别傻傻分不清了) 以正确的姿势学习动态规划 (入门篇)
动态规划真的有那么抽象吗?(递推算法还是动态规划别傻傻分不清了) 以正确的姿势学习动态规划 (入门篇)
代码随想录刷题|回溯算法理论 LetCode 77.组合
代码随想录刷题|回溯算法理论 LetCode 77.组合
代码随想录刷题|回溯算法理论 LetCode 77.组合
|
算法
【切图仔的算法修炼之旅】LeetCode206:反转链表
【切图仔的算法修炼之旅】LeetCode206:反转链表
69 0
【切图仔的算法修炼之旅】LeetCode206:反转链表
|
算法 程序员
拿捏汉诺塔问题(附有动图)
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
267 0
拿捏汉诺塔问题(附有动图)
|
算法
算法理论——动态规划(一看就会)
动态规划算法的基本思想是:将带求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解中得到原问题的解;对于重复出现的子问题,只在第一次遇到的时候对它进行求解,并把答案保存起来,避免重复求解。
103 0