Leetcode44: 通配符匹配

算法编程题:通配符匹配 本文首发于我的公众号码农之屋(id:Spider1818),专注于干货分享,包含但不限于Java编程、网络技术、Linux内核及实操、容器技术等。欢迎大家关注,二维码文末可以扫。 题目描述: 给定一个字符串(s) 和一个字符模式(p) ,实现一个支持'?'和'*'的通配符匹配。 '?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹... 阅读详情

一、题目描述

在这里插入图片描述

经典的通配符匹配题目,一直做一直忘,现在这里做下笔记。

二、解题思路

这种和前一个状态有关的题目当然是动态规划求解了。问题是:

1. 遇见 “*” 怎么处理?
2. 遇见 “?” 怎么处理?

令 dp[i][j]dp[i][j]dp[i][j] 为 sss 的第 iii 个字符和 ppp 的第 0−j0-j0−j 个字符的匹配情况。
当 ppp 的第 0−j0-j0−j 个字符,即 p[j−1]p[j-1]p[j−1] 为 “*” 时。可以考虑两种情况:

  1. 一种是星号不匹配任何字符,因此,只需要知道星号之前的一段字符和 iii 之前的一段字符的匹配情况即可:
    $dp[i][j]=dp[i][j-1]$
  2. 一种是查看星号之前的一段字符和 i−1i - 1i−1之前的一段字符的匹配情况,如果能匹配上,由于星号可以匹配任何字符,因此随便加一个字符后:iii之前的一段字符和星号之前的一段字符也可以匹配上。
    $dp[i][j]=dp[i - 1][j]$
  3. 最后需要考虑的就是 当 ppp 的第 0−j0-j0−j 个字符,即 p[j−1]p[j-1]p[j−1] 不是 “*” 时,只需要知道 iii 之前的一段字符和 jjj 之前的一段字符是否匹配上了即可:
    $dp[i][j]=dp[i - 1][j - 1] && (p[j - 1] == '?' || p[j - 1] == s[i - 1])$

三、代码

class Solution {
public:
    bool isMatch(string s, string p) {
        int n = s.size(), m = p.size();
        vector<vector<int>> dp(n + 1, vector<int>(m + 1, false));
        dp[0][0] = true;

        for (int i = 1; i <= m; ++i) {
            if (dp[0][i - 1] == true && p[i - 1] == '*') {
                dp[0][i] = true;
            }
        }

        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                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[n][m];

    }
};
LeetCode 44. 通配符匹配(回溯) Description 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 示例 1: 输入: s = "aa" p = "a" 输出: false 解释: "a" 无法匹配 "aa" 整个字符串。 示例 2: 输入: s = 阅读详情

相关推荐

LeetCode 第44题:通配符匹配

通过对LeetCode第44题——通配符匹配的详细剖析,我们学习了两种常见的解题方法:动态规划法和双指针法。无论是通过DP数组逐步求解,还是通过双指针灵活匹配,这两种方法都有各自的优缺点。在实际开发中,我们需要根据具体问题选择合适的解法。希望这篇文章不仅帮助你解决了LeetCode第44题,还能让你在面对类似问题时,有更多的解题思路和技巧。

Gemini的博客 402

LeetCode高频题44. 通配符匹配

1)关键要分清pi的状况,看看能否从pi--M-1上优化出s的si--N-1来,搞清楚base case,和各种可能的情况就好办了 2)暴力递归就是一种很好的尝试,本题还需要改记忆化搜索算法,然后优化精细化DP,有枚举行为,直接优化,老牛逼了! 3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。 ......

weixin_46838716的博客 667

Xilinx Vitis arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument

This problem may be a bugof version 2021.1 only. Unfortunately, I'm just currently using this version. After Build Project: Find where this Makefile is through "make: Leaving directory" information. For me, it is located atZynq_CPU_wrapper_hw_platfo...

Ayka的博客 6660

LeetCode44.通配符匹配 JavaScript

给定一个字符串(s) 和一个字符模式(p),实现一个支持 '?'和'*'的通配符匹配。 '?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从a-z的小写字母。 p 可能为空,且只包含从 a-z的小写字母,以及字符?和*。 示例 1: 输入: s = "aa" p = "a" 输出: false 解释:...

weixin_33796205的博客 319

Cursor聊天记录迁移工具:实现跨设备AI对话同步与备份

在软件开发中,数据持久化与迁移是常见需求,尤其当工具依赖本地存储时。SQLite作为轻量级关系型数据库,因其嵌入式、零配置特性,常被用于存储应用状态与用户数据。其WAL(预写式日志)模式提升了并发性能,但也增加了数据操作复杂性。通过命令行工具与JSON序列化技术,可以实现结构化数据的提取、转换与安全迁移,这对于保障开发资产的连续性与可移植性具有重要价值。例如,在AI辅助编程场景下,开发者与AI的对话记录包含关键的问题分析、解决方案与决策逻辑,是重要的上下文资产。cursor-chat-transfer工具正

weixin_42551967的博客 533

从学生项目到工程实践:手把手教你用ATE测试电源芯片的Rdson与漏电流

本文详细介绍了如何将学术级的电源芯片测试方案转化为工业级解决方案,重点讲解使用ATE设备测试Rdson(导通电阻)和漏电流的关键技术。从设备选型、测试夹具设计到量产环境下的工程化实现,提供了实用的优化技巧和常见问题解决方案,帮助工程师提升测试效率和精度。

weixin_42525289的博客 180

【LeetCode/力扣】44. 通配符匹配

1 题目描述 题目链接:https://leetcode-cn.com/problems/wildcard-matching/ 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 示例 1: 输入: s = “aa” p

积流成河 381

用于多种无人机协作的群体智能算法:综合综述

随着无人机技术的快速高水平发展,将多架无人机作为自主控制的编队应用于复杂情况是一个新兴领域的代表之一。在实现自主控制的挑战中,碰撞避免、任务分配、路径规划和编队重构是关键功能。本文对各种经典的无人机群智能算法进行了系统的总结和分析。

erjia_的博客 1万+

leetcode习题集——44. 通配符匹配

题目 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 示例 1: 输入: s = “aa” p = “a” ...

jessio的博客 605

一文看懂—Agent多智能体协作

多智能体协作已成为AI应对复杂任务的关键范式,通过模拟人类团队分工,实现专业化、高效化和纠错能力。本文系统阐述了多智能体协作的核心概念(智能体分工、工作流编排、工具使用)、与产品规划的关联(任务拆解、错误处理、组织架构设计),以及典型应用场景(报告生成、客服工单、学习规划)。同时剖析了常见陷阱(循环卡死、信息失真、成本失控)及解决方案,并提供了实用工具模板(角色定义卡、工作流画布、成本仪表盘)。最后通过市场竞品分析和旅行规划两个实战案例,展示了多智能体协作的实际价值。该技术正推动AI从单点智能迈向系统智能,

lee006006的博客 1033

HEC-HMS水文建模从入门到精通:手把手教你安装与配置(附常见问题解决)

本文详细指导HEC-HMS水文建模软件的安装与配置,重点解析了基于InstallShield Wizard的安装流程,并提供了针对常见错误代码(如-6003)的解决方案。旨在帮助水文、水利领域从业者快速搭建稳定的建模环境,为后续流域模拟与洪水预报奠定基础。

weixin_29213827的博客 495

LeetCode 力扣 44. 通配符匹配

题目描述(困难难度) 字符串匹配,? 匹配单个任意字符,* 匹配任意长度字符串,包括空串。和[第 10 题](https://leetcode.windliang.cc/leetCode-10-Regular-Expression-Matching.html)有些类似。 解法一 动态规划 直接按照之前第 10 题,修改一下就可以了。 同样是用 dp[i][j] 表示所有的情况,然后一层一层的根据...

wind_liang的博客 1204

把 ABAP ALE Change Pointers 讲透:从 CDHDR/CDPOS 到 BDCP2,再到 RBDMIDOC 的自动分发链路

摘要:SAP ALE Change Pointers机制在系统集成中实现业务变更与数据分发的解耦。它记录业务对象变更(如SAP主数据修改),但不立即发送,而是由后续分发逻辑决定发送时机和方式。该机制包含两层:Change Documents记录审计级变更明细,Change Pointers标记需分发的关键变更。配置核心包括全局开关、消息类型激活和字段选择。典型应用如零售价格条件变更自动推送至POS系统,通过BDCP2表存储待处理队列,由RBDMIDOC程序定时评估生成IDoc。运维需关注定期清理和性能优化,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 207

LeetCode 44:通配符匹配

设dp[i][j]字符串s的前i个字符s[0..i-1]模式串p的前j个字符p[0..j-1]是否完全匹配。

m0_75126572的博客 1196

芒果YOLOv7改进04:Loss篇:原创改进损失函数Repulsion:独家首发最新改进Repulsion Loss解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点

YOLOv7原创改进Repulsion|首发最新改进为解决密集人群检测中遮挡设计的损失函数

包括YOLOv5、YOLOv7、YOLOv8等模型改进 3250

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LeetCode第44题_通配符匹配

给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持和'*'的通配符匹配。'*'匹配应该覆盖整个字符串 (s) ,而不是部分字符串。

qq_40263592的博客 974

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode--44.通配符匹配

前言:不知不觉又断更一天了,其实昨天就把这道题写得差不多了,只是刚好在力扣里面看见了一种新的解法,本来想写出来的,但是我把它推到今天了,因为太晚了,但是今天又睡懒觉了,所以我直接写出思路,就不写代码了,今天在写了这道题的题解之后,我觉得我之前写的力扣第十题的题解相比于这道题还是太过于稚嫩了,没有抓到主体上面,不够通俗易懂,都是它的缺点。所以,我们如果是个机器,要处理这样的问题,我们只会遍历完所有的情况,让所有的情况都用动态规划走一遍,那么只要有一条走得通,那么就说明可以匹配。

dying_man的博客 1694

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LeetCode 44.通配符匹配

LeetCode 44.通配符匹配 确定状态: 和10题很类似,因为’.’和’?’作用相同,但是这 题中’*’可以匹配0个或多个任意字符 情况1:如果B[n-1]是一个正常字符(非?非*),则如果A[m-1]=B[n-1],能否匹 配取决于A[0..m-2]和B[0..n-2]是否匹配;否则不能匹配。 情况2:如果B[n-1]是?,则A[m-1]一定是和?匹配,之后能否匹配取决于 A[0..m-...

未命名 222

字符串通配符匹配_LeetCode题记——44通配符匹配

LeetCode 44 Hard难度 标签:前200,面试高频题意:给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1...

weixin_39915505的博客 103

力扣 44. 通配符匹配

用动态规划解决 问题描述: 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 示例 1: 输入: s =...

sinat_39336328的博客 318

leetcode 44 通配符匹配 C语言实现

题目 leetcode 44 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 示例 1: 输入: s = “aa”...

qq_42007287的博客 434

LeetCode 44. 通配符匹配 | Python

使用动态规划的思路,解决《44. 通配符匹配》问题

"大梦三千秋的博客 940

leetcode.44 通配符匹配解决过程

leetcode 44.通配符匹配 原题链接 题目 给定一个字符串 s 和一个字符模式 p,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 示例 1: 输入:...

qq_41771502的博客 252

LeetCode 44. 通配符匹配

题目链接 LeetCode 44. 通配符匹配 题目描述 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 解题思...

tangzhide123yy的博客 185

LeetCode_44.通配符匹配

44. 通配符匹配难度困难296给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 示例 1: 输入: s = “a...

weixin_45774706的博客 300

字符串通配符匹配_leetcode44. 通配符匹配

leetcode44. 通配符匹配给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入: s = "aa" p ...

weixin_39641386的博客 117
上一篇: 分布式项目学习笔记(一):protobuf 的安装以及使用
下一篇: 分布式项目学习笔记(二):本地服务发布成RPC服务
zsiming
博客等级 码龄7年 43粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值