DP 动态规划 Leetcode044 通配符匹配(与010题类似)

母题

https://blog.csdn.net/qq_52934831/article/details/121293184?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163789035616780269829723%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163789035616780269829723&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-1-121293184.pc_v2_rank_blog_default&utm_term=%E5%8C%B9%E9%85%8D

地址

https://leetcode-cn.com/problems/wildcard-matching/

描述

在这里插入图片描述

思想

dp问题当我们需要使用i-1时,为了避免特判需要在字符串前面+’ ',让下标从1开始
在这里插入图片描述

代码

class Solution {
public:
    bool isMatch(string s, string p) {
        int n=s.length(),m=p.length();
        s=' '+s,p=' '+p;
        vector<vector<bool>> f(n+1,vector<bool>(m+1));
        f[0][0]=true;
        for(int i=0;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(p[j]=='*'){
                    f[i][j]=f[i][j-1]||i&&f[i-1][j];
                }
                else {
                    //注意这里&&的顺序也很重要:i要在f[i-1][j-1]前面,不然会报错。
                    f[i][j]= (s[i]==p[j]||p[j]=='?')&& i&& f[i-1][j-1];
                }
            }
        }
        return f[n][m];
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值