[LeetCode] 44. Wildcard Matching

LeetCode 44. Wildcard Matching(模糊匹配) 原题网址:https://leetcode.com/problems/wildcard-matching/ Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. '*' Matches any sequence of characters ( 阅读详情

Wildcard Matching

Given an input string (s) and a pattern §, implement wildcard pattern matching with support for ‘?’ and ‘*’.

‘?’ Matches any single character.
‘*’ Matches any sequence of characters (including the empty sequence).

The matching should cover the entire input string (not partial).
Note:

  • s could be empty and contains only lowercase letters a-z.
  • p could be empty and contains only lowercase letters a-z, and characters like ? or *.

Example 1:

Input:
s = “aa”
p = “a”
Output: false
Explanation: “a” does not match the entire string “aa”.

Example 2:

Input:
s = “aa”
p = ""
Output: true
Explanation: '
’ matches any sequence.

Example 3:
Input:

s = “cb”
p = “?a”
Output: false
Explanation: ‘?’ matches ‘c’, but the second letter is ‘a’, which does not match ‘b’.

Example 4:

Input:
s = “adceb”
p = “ab”
Output: true
Explanation: The first ‘’ matches the empty sequence, while the second '’ matches the substring “dce”.

Example 5:

Input:
s = “acdcb”
p = “a*c?b”
Output: false

解析

?可以匹配任意单个字符,*匹配任意长度的字符。判断p是否可以匹配s。

解法1:动态规划

使用动态规划求解:
使用一个二维数组dp[s.size+1][p.size+1],dp[i][j]表示字符串s中0-i的字符能否匹配p中0-j的字符,并初始dp[0][0]=1;
当p[j]=s[i]或者p[j] =‘?’时,dp[i][j] = dp[i-1][j-1];
当p[j]=’*'时,可以匹配0个字符,dp[i][j] = dp[i-1][j],可以匹配1个字符,dp[i][j] = dp[i-1][j-1],所以
dp[i][j] = dp[i-1][j] || dp[i-1][j-1] ||…|| dp[i-1][0].
由于dp[i][j-1] = dp[i-1][j-1] || dp[i-1][j-2] ||…|| dp[i-1][0].
得到dp[i][j] = dp[i-1][j] || dp[i][j-1].
在这里插入图片描述

class Solution {
public:
    bool isMatch(string s, string p) {
        int m = s.size(), n = p.size();
        vector<vector<bool>> dp(m + 1, vector<bool>(n + 1, false));
        dp[0][0] = true;
        for (int i = 1; i <= n; ++i) {
            if (p[i - 1] == '*') 
            	dp[0][i] = dp[0][i - 1];
        }
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (p[j - 1] == '*') 
                    dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
                else 
                    dp[i][j] = (s[i - 1] == p[j - 1] || p[j - 1] == '?') && dp[i - 1][j - 1];
            }
        }
        return dp[m][n];
    }
};

解法2

使用四个指针来记录位置,分别为
pcur:p字符串当前位置
scur:s字符串当前位置
pstar:最后一个*的位置
sstar:对应与pstar的s的位置
初始化pcur=scur=0,pstar=sstar=-1;
迭代过程如下:
当scur<s.size()时

  • 如果s[scur]=p[pcur]或者p[pcur]=?,pcur++,scur++;
  • 如果p[pcur]=‘*’,pstar=pcur,pcur++,sstar=scur;
  • 如果pstar存在,pcur=pstar+1,sstar++,scur=sstar;

如果p[pcur]=’*’,pcur++;
如果pcur=p.size,返回true。

class Solution {
public:
    bool isMatch(string s, string p) {
        int sstar=-1;
        int pstar=-1;
        int pindex = 0,sindex=0;
        int size = s.size();
        while (sindex<size){
            if ((p[pindex]=='?')||(p[pindex]==s[sindex])){
                sindex ++;
                pindex ++;
            } 
            else if (p[pindex]=='*'){
                pstar = pindex; 
                pindex ++;
                sstar = sindex;
            } 
            else if (pstar != -1){ 
                pindex = pstar+1;
                sstar ++;
                sindex = sstar;
            } 
            else
                return false;
        }
        while (p[pindex]=='*'){pindex++;}
        return pindex==p.size();  
    }
};

参考

https://www.cnblogs.com/yuzhangcmu/p/4116153.html
https://www.cnblogs.com/grandyang/p/4401196.html

Leetcode #44. Wildcard Matching 通配符匹配 解题报告 1 解题思想嗯,最近遇到要写Hard的频率偏高,而最近的重心也不再Leetcode上,心累。。Hard写起来都好麻烦。这道题好像之前也有几次,讲过类似的题目,也就是*能任意长度和字符匹配,?能匹配任意一个字符,现在需要验证给定的通配符是否能匹配输入的串这道题应该有很多做法,我的这个感觉只是一个比较一般的解法,这道题的测试量比较大,所以单纯的暴力搜索是AC不掉的,而我的做法,就是使用动态规划。不知道大 阅读详情

相关推荐

Leetcode | C++ 44-Wildcard Matching

题目分析: 给你s和p两个字符串,它们均由小写字母以及’?’、’*‘组成,其中’?‘与任何一个字符匹配,’*'与任何长度字符串匹配(可以为空),问s和p是否完全匹配。 解题思路(1): 很容易想到dfs的方法,用dfs(i,j)表示当前要当前检查到s[i]与p[j],如果两个都不是’*’,那么直接看这两个字母是否匹配,如果匹配继续往下走dfs(i+1,j+1),否则返回false;如果s[i]与p[j]中有’*’,比如s[i]=’*’,那么dfs(i+1,j)、dfs(i+1,j+1)……dfs(i+1,l

weixin_54707168的博客 334

【面试题 & LeetCode 44】Wildcard Matching

题目描述 Given an input string (s) and a pattern §, implement wildcard pattern matching with support for ‘?’ and ‘*’. ‘?’ Matches any single character. ‘*’ Matches any sequence of characters (including th...

iCode_girl的博客 217

CTF实战:手把手教你用Python破解转轮机加密(附完整脚本)

本文详细介绍了如何使用Python逆向破解转轮机加密,特别针对CTF比赛中的Crypto类题目。通过解析转轮机加密原理、实战Python脚本编写及调试技巧,帮助参赛者快速掌握破解方法,提升在攻防世界等CTF比赛中的解题效率。

silver的专栏 1116

LeetCode 44. Wildcard Matching动态规划算法实现

题目内容 Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*'. 两个字符串,S作为被匹配的字符串,P作为匹配字符串 '?' Matches any single character. '*' Matches any sequ...

太玄经的博客 402

银河麒麟V10 SP3下NFS客户端挂载失败?5个常见问题排查与修复

本文针对银河麒麟V10 SP3系统中NFS客户端挂载失败的常见问题,提供了5个实战排查方案。从基础服务状态检查到防火墙配置、版本兼容性、/etc/fstab设置及权限映射,详细解析了问题根源与解决方案,帮助用户快速恢复NFS文件共享功能。

weixin_42525005的博客 361

OMNET++ INET框架学习教程(一)

在自组网学习的道路上摸石头过河,帮你快速入门OIMNET++平台下的INET框架。

NLDwangzhe的博客 6565

[leetcode] 44 Wildcard Matching

问题描述; Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence). The matching shou

追梦船的专栏 862

Sobel原理及计算过程详解

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。

2301_76461741的博客 1万+

Leetcode 44. Wildcard Matching 通配符匹配

Leetcode 44. Wildcard Matching 通配符匹配 标签: Leetcode 题目地址:https://leetcode-cn.com/problems/wildcard-matching/ 题目描述 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹...

CoderWangSon 306

把慢点掰开看:在 SAP HANA 中启用 SQL 优化耗时跟踪 SqlOptTime 的实战指南

摘要:SAP HANA 性能排查中,常出现SQL查询时快时慢的现象,表面看似执行问题,实则是编译阶段耗时过长。通过SQL优化跟踪工具SqlOptStep和SqlOptTime,可精准区分编译与执行时间。SqlOptStep展示优化树变化过程,而SqlOptTime则记录各阶段耗时,帮助定位问题根源。启用SqlOptTime需配置traceprofile,建议限定特定用户以减少系统负载。实际案例显示,报表响应慢常由计算视图编译(CeQo)导致,而非执行阶段问题。解决方案包括调整计算视图展开方式或优化基础视图结

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

uniapp - 最新详细实现web-view网页与安卓苹果App端之间互相通信功能,苹果app/安卓app平台与内嵌webview组件内的网页进行相互传值,内置网页与app双向实时通信,详细示例代码

uni-app,Android安卓,苹果ios,app,内嵌webview,第三方H5网页,app和web-view通信传值,web-view引入的页面向App主应用传递数据,App端与webview端相互通信,App端和H5端webview之间的通信,uniapp实现webview和APP之间的传值通信,如何互相传递对象数据,数据传递了接收不到,web-view页面向app内发送消息,监听传递的参数,uni-app和web-view页面相互传参,报错怎么办,跨域,屏幕空白出错,数据交互,解决手机物理返回按

🏆 前端领域优质创作者 4741

Leetcode 44. Wildcard Matching

44.Wildcard Matching 题目链接:https://leetcode.com/problems/wildcard-matching/ Description: Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for'?'a...

dft539533的博客 121

【AUTOSAR-DEM】-2.1-APP SWC设置UDS/OBD DTC检出和恢复

点击返回「《Autosar_BSW高阶配置》总目录」 案例背景(共6页精讲): DEM模块提供两种不同类型的Event: • BSW-related events:DEM_EVENT_KIND_BSW(通过C-API报告 - Dem_SetEventStatus) • SW-C-related events:DEM_EVENT_KIND_SWC(通过RTE operation - SetEventStatus) 下面我们讲讲在APP SWC中设置BusOff(总线关闭) DTC故障成立/恢复(其它

「汽车电子助手」的博客 3944

★leetcode44_Wildcard Matching

一.问题描述 Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence). The matching sh

越努力越幸运 544

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

leetcode 44. Wildcard Matching

leetcode

qq_38767668的博客 312

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[leetcode] 44. Wildcard Matching

Description Given an input string (s) and a pattern §, implement wildcard pattern matching with support for ‘?’ and ‘*’. '?' Matches any single character. '*' Matches any sequence of characters (inclu...

Learning from the mistakes 291

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

44. Wildcard Matching Leetcode Python

Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence). The matching should cover t

hyperbolechi的专栏 1596

LeetCode 44:Wildcard Matching

Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence). The matching should cov

哈哈的个人专栏 2065

leetcode-44 wildcard matching

Given an input string (s) and a pattern §, implement wildcard pattern matching with support for ‘?’ and ‘*’. ‘?’ Matches any single character. ‘*’ Matches any sequence of characters (including the emp...

weixin_42521881的博客 252

LeetCode //C - 44. Wildcard Matching

【代码】LeetCode //C - 44. Wildcard Matching。

Made in Code 1365

leetcode44——Wildcard Matching

题目大意:通配符匹配,问给出的两个字符串s和p是否匹配,其中s是小写字母组成的,p是由小写字母和?*组成的,?可以匹配一个字符,*可以匹配0~n个字符。分析:和leetcode10有点类似,不过本题不用dp求解,而是回溯搜索。难点在于*的匹配,下面介绍一种迭代回溯的思路。利用两个指针ss和pp来维护当前位置,当匹配失败时,s和p回溯到ss和pp的下一位置重新匹配。代码:c语言转载自https://...

tzyshiwolaogongya的博客 193

leetcode 10 Regular Expression Matching & 44 Wildcard Matching

leetcode中的两个 正则表达式匹配

ghoshorn的专栏 733

[leetcode][C++]44. Wildcard Matching

链接:https://leetcode.com/problems/wildcard-matching/description/ 题目说明:外卡匹配,使用动态规划的思路。外卡匹配和正则匹配的最大不同就是外卡匹配中星号可以单独存在。 创建匹配数组(用vector<vector<bool>> match表示),大小分别为s.length()+1和p.length()...

amsikq886040的博客 206
上一篇: [LeetCode] 5. Longest Palindromic Substring
下一篇: [LeetCode] 1. Two Sum
Peng_maple
博客等级 码龄10年 0粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值