P173. 通配符匹配

leetcode 44 lintcode 192 字符串 动态规划 贪心 回溯 讨论

温馨提示:您没有权限查看当前视频。 立即购买观看视频

描述

这个题目说的是,给你一个字符串 s,和一个模式串 p。你要实现一个能支持 ? 和 * 的通配符匹配。其中,? 可以匹配任意单个非空字符,* 可以匹配 0 个字符或任意多个字符。

s 可以是空字符串,也可以是只包含小写字母的非空字符串;p 可以是空字符串,也可以是只包含小写字母、? 或 * 的非空字符串。

注意,p 一定是合法的模式串,并且只有 p 匹配 s 的整个字符串时,才返回 true。

比如说,

s: aa
p: a

模式串 p 不包含通配符,且 s 和 p 不相同,于是这一组 p 和 s 不匹配。

再比如说,

s: ac
p: *

* 可以匹配任意多个字符,因此这一组 p 和 s 匹配,返回 true。

如果这一组的 s 不变,仍然为 ac,但是把 p 改成 *d:

s: ac
p: *d

由于 p 中的字符 d 无法在 s 中找到匹配字符,因此这一组 p 和 s 不匹配,返回 false。

最后再举个例子:

s: abcde
p: *a*d?

我们只需要让第一个 * 匹配空字符,第二个 * 匹配 bc,最后的 ? 匹配字符 e,就可以把模式串变成 abcde。于是对于这一组字符串,p 可以匹配 s。

相关视频:简易正则表达式匹配

关于 AlgoCasts

AlgoCasts 旨在用心做好每一个算法讲解视频。每个视频包含两个部分:题目的剖析讲解以及编码,力求在讲解清楚到位的基础上,尽可能地保持视频精简短小,让大家可以在碎片时间里进行学习,并收获这些算法题背后的思想与乐趣。