Leetcode Hot100 第65题 10.正则表达式匹配

cpp 复制代码
class Solution {
public:
    bool isMatch(string s, string p) {
        s = " " + s;
        p = " " + p;
        // 加了上面这个就可以避免为"c*xxx"进行特殊初始化
        // dp[i][j]表示s[0..i-1]与p[0...j-1]是否可以匹配
        vector<vector<bool>> dp(s.size()+1,vector<bool>(p.size()+1,false));
        dp[0][0] = true;
        for(int i=1;i<=s.size();i++){
            for(int j=1;j<=p.size();j++){
                if(p[j-1]==s[i-1]){
                    dp[i][j]=dp[i-1][j-1];
                }else if(p[j-1]=='*'){
                    if(s[i-1]==p[j-2]||p[j-2]=='.'){
                        dp[i][j] = dp[i][j-2]||dp[i][j-1]||dp[i-1][j]; //不匹配 匹配一个 匹配多个
                    }else{
                        dp[i][j] = dp[i][j-2];
                    }
                }else if(p[j-1]=='.'){
                    dp[i][j] = dp[i-1][j-1];
                }else{
                    dp[i][j]=false;
                }
            }
        }
        return dp[s.size()][p.size()]; 
    }
};
相关推荐
1白天的黑夜14 分钟前
递归-24.两两交换链表中的节点-力扣(LeetCode)
数据结构·c++·leetcode·链表·递归
1白天的黑夜121 分钟前
递归-206.反转链表-力扣(LeetCode)
数据结构·c++·leetcode·链表·递归
靠近彗星21 分钟前
3.1 栈
数据结构·算法
sulikey42 分钟前
一文彻底理解:如何判断单链表是否成环(含原理推导与环入口推算)
c++·算法·leetcode·链表·floyd·快慢指针·floyd判圈算法
Swift社区1 小时前
LeetCode 402 - 移掉 K 位数字
算法·leetcode·职场和发展
_码力全开_1 小时前
P1005 [NOIP 2007 提高组] 矩阵取数游戏
java·c语言·c++·python·算法·矩阵·go
墨染点香1 小时前
LeetCode 刷题【124. 二叉树中的最大路径和、125. 验证回文串】
算法·leetcode·职场和发展
Camel卡蒙1 小时前
红黑树详细介绍(五大规则、保持平衡操作、Java实现)
java·开发语言·算法