题目介绍
请实现一个函数用来匹配包括 . 和 * 的正则表达式。
模式中的字符 . 表示任意一个字符,而 * 表示它前面的字符可以出现任意次(包含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。
字符串"aaa"与模式"a.a"和"ab*ac*a"匹配;
字符串"aaa"与"aa.a"和"ab*a"均不匹配。
题目解读
我们可以先从 * 字符进行入手,因为 * 字符相对于 . 字符来说较为复杂,情况也更多。
首先按第一个字符后是否为 * 字符,分为两种情况,再对这两种情况进行讨论。
1.首字符后(也就是第二个字符)为 * 字符时,这种情况下我们会再进行一次判断:
判断字符串和pattern的首字符是否相等,如果不相等,我们只有将pattern后移两个字符,才有匹配成功的可能;
如果首字符相等 ( . 也可以看作相等),那么又会有以下三种匹配模式:
- 直接跳过pattern的前两个字符,也就是 * 前面的字符看作出现0次;
- 字符串后移一个字符,pattern后移两个字符,即将 * 前面出现的字符看作出现一次;
- 字符串后移一个字符,pattern保持不动,即将 *