LeetCode--10. 正则表达式匹配
最后更新于
最后更新于
给你一个字符串
s
和一个字符规律p
,请你来实现一个支持'.'
和'*'
的正则表达式匹配。
'.'
匹配任意单个字符
'*'
匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串
s
的,而不是部分字符串。
难,隔了四个月,终究还是一点记不得了,看着题解写的,说一下自己的理解:
由于我们需要一个初始状态,多开辟一组空间,来保存我们的初始状态,方便进行状态转移,然后需要开始dp。
依次遍历每个字符,如果当前正则表达式的字符为'*',这说明而如果它前面的字符为x,那么它可以匹配任意长度,包括0的x子串,于是我们的方程就应该是f[i][j] = f[i][j] || f[i][j - 2]
,为什么是j - 2的原因,在注释中标出来了。
而这仅仅是匹配了我们的前前个字符,并不能覆盖所有的情况,因为如果我们的当前正则表达式的*前面一个字符刚好能够匹配当前需要被匹配的字符串(s),这确实无法通过上面那一步判断出来的,所以还需要加一步判断。
另外一种情况就是,当前遍历到的正则表达式字串不为*,那么就直接匹配我们的字符串,状态转移即可。