| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode每日一题-通配符匹配 -> 正文阅读 |
|
[数据结构与算法]LeetCode每日一题-通配符匹配 |
题目
分析 典型的动态规划题,做这道题费劲的不是找出规律写出动态方程,而是填充边界值。 先看怎么定义状态数组,示例1中?s = "adceb"? p = "*a*b",那它们对应关系如下图: 因为题目说明s,p都可能为空,所以状态数组大小需要加1:
当s,p都为空时:
接下来是填充边界值,主要是为了处理前缀为*的情况,这种情况分两一个*或者多个连续的*:
填充完后,上图的状态图则变成如下: 状态方程 先分析最简单的情况,都为字母时:
p为?时:
p为*时,它的作用可能会有两种,一种是表示为空,另外一种是一个或者多个字母:
演示: p = "*a*b",p的长度为4,需要进行四层遍历 第一层遍历:i=1, p.charAt(i-1) = '*', 此时*表示一个或者多个字母,所以所有字母都可以跟它匹配得上,对s完成遍历后效果如下:(红色true) 第二层遍历:i=2, p.charAt(2-1) = 'a', 对s完成遍历后效果如下:(黄色true) 第三层遍历:i=3, p.charAt(3-1) = '*', 对s完成遍历后效果如下:(绿色true) 第四层遍历:i=4, p.charAt(4-1) = 'b', 对s完成遍历后效果如下:(蓝色true) 代码
结果 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:44:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |