问题描述
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。
示例
输入: s = "aa" p = "a" 输出: false 解释: "a" 无法匹配 "aa" 整个字符串。
问题分析
对于正则表达式匹配问题,假如匹配串中不存在字符 * ,那么整个判断过程就简单了很多。我们只需要判断字符串和匹配串每一位是否相等即可。
假如现在匹配串中有字符 * 号,那么在遇到带 * 的字符时有以下三种情况:
- 带 * 的字符不匹配,直接跳过
- 带 * 的字符匹配一位原字符串
- 带 * 的字符匹配多位原字符串
其中匹配多位原字符也可以通过多次匹配一位原字符来表示。因此,这里我们就可以使用回溯的思想解决问题:
回溯法
public boolean isMatch(String s, String p)