前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >☆打卡算法☆LeetCode 44、通配符匹配 算法解析

☆打卡算法☆LeetCode 44、通配符匹配 算法解析

作者头像
恬静的小魔龙
发布2022-08-07 10:01:29
3680
发布2022-08-07 10:01:29
举报
文章被收录于专栏:Unity3DUnity3D

大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。

一、题目

1、算法题目

“给定一个字符串和一个字符模式,实现一个通配符匹配。”

题目链接:

来源:力扣(LeetCode)

链接:44. 通配符匹配 - 力扣(LeetCode) (leetcode-cn.com)

2、题目描述

给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。

代码语言:javascript
复制
'?' 可以匹配任何单个字符。
'*' 可以匹配任意字符串(包括空字符串)。

两个字符串完全匹配才算匹配成功。

说明:

  • s 可能为空,且只包含从 a-z 的小写字母。
  • p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
代码语言:javascript
复制
示例 1:
输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。
代码语言:javascript
复制
示例 2:
输入:
s = "aa"
p = "*"
输出: true
解释: '*' 可以匹配任意字符串。

二、解题

1、思路分析

这个题跟正则表达式匹配还是很像的,但是相对而已本题还是简单一些。

首先,模式p中任意字符都是独立的,不会与其他字符相互关联,比说说小写字母a-z都是匹配一个小写字母,问号?可以匹配任意一个小写字母,但是星号* 的匹配是不确定的,需要枚举所有的匹配情况。

为了减少重复枚举,我们可以使用双指针来解决本题。

2、代码实现

代码参考:

代码语言:javascript
复制
public class Solution {
    public bool IsMatch(string s, string p) {
        int i = 0;//指向字符串s
        int j = 0;//指向字符串p
        int startPos = -1;//记录星号的位置
        int match = -1;//用于匹配星号
        while(i < s.Length){
            //表示相同或者p中为?
            if(j < p.Length &amp;&amp; (s[i] == p[j] || p[j] == '?')){
                i++;
                j++;
            }
            //匹配到了星号,记录下的位置
            else if(j < p.Length &amp;&amp; p[j] == '*'){
                startPos = j;
                match = i;
                j = startPos + 1;
            }
            //以上都没有匹配到,回到星号所在的位置,往后再次匹配
            else if(startPos != -1){
                match++;
                i = match;
                j = startPos + 1;                
            }
            else{
                return false;
            }
        }
        //去除多余的星号
        while(j < p.Length &amp;&amp; p[j] == '*')j++;
        return j==p.Length;
    }
}

3、时间复杂度

时间复杂度 : O(mn)

其中m和n分别是字符串和模式的长度。

空间复杂度: O(mn)

只需要存储所有m+n个状态需要的空间。

三、总结

忘了正则表达式匹配是怎么做的,可以返回去看一下# ☆打卡算法☆LeetCode 10、实现正则表达式匹配 算法解析

当然,想算法很爽,写算法很难受,这就叫做思想的巨人,行动的矮人嘛。。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目
    • 1、算法题目
      • 2、题目描述
      • 二、解题
        • 1、思路分析
          • 2、代码实现
            • 3、时间复杂度
            • 三、总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档