通配符匹配
------类似No.10的正则匹配
给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。
'?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。
说明:
s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
题目分析
和正则一样, 重点在于 * 的任意位匹配
假如是一个没有 * 的串匹配, 我们只要碰到一个匹配失败即可结束
有了 的情况, 可以用来干什么呢?-----帮你把匹配失败的地方干掉
因此其实我们可以先正常逐个精确匹配, 遇到 * 可以记录下来, 以便帮助后面
当在某一位精确匹配失败时, 我们回去找 的帮助, 如果之前没有 , 帮不了, 匹配失败
假如之前有 ,即需让往后匹配来避免这个失败位, 但是因为* 每向后扩展一位, 原本的精确匹配顺序全都挪动了一位, 此时我们不知道是不是能匹配成功
因此 帮忙的时候, 只向后扩展一位试试, 此时是一个未知的匹配状态, 我们需要在 * 的边缘重新开始精确匹配, 再失败了就重复 6 即可
题解代码
1 | class Solution { |