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

LintCode第192题-通配符匹配

描述

给定一个字符串 s 和一个字符模式 p ,实现一个支持 '?' 和 '*' 的通配符匹配。匹配规则如下:

  • '?' 可以匹配任何单个字符。
  • '*' 可以匹配任意字符串(包括空字符串)。

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

样例

样例1

 
输入:
"aa"
"a"
输出: false

输出2

 
输入:
"aa"
"aa"
输出: true

输出3

 
输入:
"aaa"
"aa"
输出: false

输出4

 
输入:
"aa"
"*"
输出: true
说明: '*' 可以替换任何字符串

输出5

 
输入:
"aa"
"a*"
输出: true

样例6

 
输入:
"ab"
"?*"
输出: true
说明: '?' -> 'a' '*' -> 'b'

样例7

 
输入:
"aab"
"c*a*b"
输出: false

思路:

难点在于该题的初始化 转移方程 

初始化:

dp[0][j]=dp[0][j-1];

转移方程:

匹配分为3部分 普通字符匹配 ?匹配 *匹配 

//如果是普通匹配 那么就是

dp[i][j]=dp[i-1][j-1];

//如果是p的字符是?情况的匹配

dp[i][j]=dp[i-1][j-1];

//如果是p的字符是*的情况下的匹配

dp[i][j]=dp[i][j-1] || dp[i-1] [j];

dp[i][j]=dp[i][j-1]用于s是空字符串 p是*的情况

dp[i][j]=dp[i-1] [j];//这个就是当p[j]为字符*的时候 * 可以不匹配任何字符,只是“存在但不参与匹配” 所以选择忽略掉

代码如下:

public class Solution {

    public boolean isMatch(String s, String p) {

        int m = s.length();

        int n = p.length();

        boolean[][] dp=new boolean[m+1][n+1];

        dp[0][0]=true;//空串匹配空串

        //初始化

        for(int j=1;j<=n;j++)

        {

            if(p.charAt(j-1)=='*')

            {

                dp[0][j]=dp[0][j-1]; 继承上一个状态

            }else {
                break; // 一旦不是 *,后面都不可能匹配空串了
                    }

        }

        for(int i=1;i<=m;i++)

        {

            for(int j=1;j<=n;j++)

            {

                char scharacter=s.charAt(i-1);

                char pcharacter=p.charAt(j-1);

                if(scharacter==pcharacter|| pcharacter == '?')

                {

                    dp[i][j]=dp[i-1][j-1];

                }else if(pcharacter=='*')

                {

                    dp[i][j] = dp[i][j - 1] || dp[i - 1][j];

                }else

                {

                    dp[i][j]=false;

                }

            }

        }

        return dp[m][n];

    }

}

http://www.xdnf.cn/news/61363.html

相关文章:

  • VLAN间通讯技术
  • uniapp云打包针对谷歌视频图片权限的解决方案
  • 实验八 版本控制
  • 大模型训练与推理:存储需求的差异及高性能全闪存储的效能提升
  • Vue2集成ElementUI实现左侧菜单导航
  • 【EasyPan】MySQL主键与索引核心作用解析
  • 《AI大模型应知应会100篇》第30篇:大模型进行数据分析的方法与局限:从实战到边界探索
  • 论文笔记-arXiv2025-FilterLLM
  • 免疫定量分析仪:精准医疗时代的诊断利器与市场蓝海
  • 富文本编辑器
  • ubuntu--字体设置
  • 深度图可视化
  • 4月谷歌新政 | Google Play今年对“数据安全”的管控将全面升级!
  • 极狐GitLab 自定义实例级项目模板功能介绍
  • Unreal如何使用后处理材质实现一个黑屏渐变效果
  • 人类行为的原动力是自我保存-来自ChatGPT
  • 【SpringBoot】HttpServletRequest获取使用及失效问题(包含@Async异步执行方案)
  • 使用IntersectionObserver实现目标元素可见度的交互
  • web原生API AbortController网络请求取消方法使用介绍:防止按钮重复点击提交得最佳方案
  • 数码管静态显示一位字符(STC89C52单片机)
  • QT 的.pro 转 vsproject 工程
  • C++ 2025 展望:现代编程需求与新兴技术驱动下的变革
  • 目标检测篇---R-CNN梳理
  • 多线程出bug不知道如何调试?java线程几种常见状态
  • 讯联桌面TV版apk下载-讯联桌面安卓电视版免费下载安装教程
  • Python-Django系列—部件
  • 天翼云手机断开连接2小时关机
  • 2025大模型十大安全威胁(OWASP TOP 10 LLM 2025).pdf
  • 基于MuJoCo物理引擎的机器人学习仿真框架robosuite
  • Python常用的第三方模块【openpyxl库】读写Excel文件