当前位置: 首页 > article >正文

leetcoed0044. 通配符匹配 hard

1 题目:通配符匹配

官方难度:难

给你一个输入字符串 (s) 和一个字符模式 ( p ) ,请你实现一个支持 ‘?’ 和 ‘*’ 匹配规则的通配符匹配:
‘?’ 可以匹配任何单个字符。
‘*’ 可以匹配任意字符序列(包括空字符序列)。
判定匹配成功的充要条件是:字符模式必须能够 完全匹配 输入字符串(而不是部分匹配)。

示例 1:

输入:s = “aa”, p = “a”
输出:false
解释:“a” 无法匹配 “aa” 整个字符串。

示例 2:

输入:s = “aa”, p = ""
输出:true
解释:'
’ 可以匹配任意字符串。

示例 3:

输入:s = “cb”, p = “?a”
输出:false
解释:‘?’ 可以匹配 ‘c’, 但第二个 ‘a’ 无法匹配 ‘b’。

提示:

0 <= s.length, p.length <= 2000
s 仅由小写英文字母组成
p 仅由小写英文字母、‘?’ 或 ‘*’ 组成

代码

bool isMatch(string s, string p) {
    int m = s.size();
    int n = p.size();

    vector<vector<bool> > dp(m + 1, vector<bool>(n + 1));

    for (int i = 0; i <= m; i++) {
        for (int j = 0; j <= n; j++) {
            if (i == 0 && j == 0) dp[i][j] = true;
            else if (j == 0) {
                dp[i][j] = false;
            } else if (i == 0) {
                if (p[j - 1] == '*') {
                    dp[i][j] = dp[i][j - 1];
                } else {
                    dp[i][j] = false;
                }
            } else {
                if (p[j - 1] == '*') {
                    dp[i][j] = dp[i - 1][j] || dp[i][j-1];
                } else {
                    dp[i][j] = dp[i - 1][j - 1] && (s[i - 1] == p[j - 1] || p[j - 1] == '?');
                }
            }
        }
    }
    return dp[m][n];
}

结果

在这里插入图片描述


http://www.kler.cn/a/613279.html

相关文章:

  • DQL语句-distinct去重
  • git 问题 master has no tracked branch
  • 第一卷:京口草鞋摊的野望(1-36回)正反人物群像
  • 管家婆财贸ERP BD002.存货销售订单汇总看板
  • 中国劳动统计年鉴pdf+excel(1989-2024年)
  • CSS——变换、过度与动画
  • element-plus中,Tour 漫游式引导组件的使用
  • 1.单片机及开发板介绍
  • Python数据可视化-第1章-数据可视化与matplotlib
  • 产生式系统的完整示例——医疗诊断系统(附python代码)
  • F.binary_cross_entropy与sklearn.metric.log_loss的比较
  • 《C语言实现金字塔图案打印》
  • CSS学习笔记6——网页布局
  • CSS-BFC(块级格式化上下文)
  • 企业为何青睐数字孪生大屏?技术驱动与价值重构的双重逻辑
  • 市场价格变动的影响因素及趋势研判
  • 如何应对硬件测试覆盖率不足导致量产故障
  • 深入理解 Linux 文件权限:从 ACL 到扩展属性,解剖底层技术细节与命令应用
  • 将 PDF 转换为 Word — 固定布局 vs 重排布局?
  • HCIA【ACL】