Leetcode 10 Regular Expression Matching

各位看官别怪我少见多怪,连这么经典的题目都要拿出来说一遍。但是对于字符串和DP同时相关的题目我是真不熟练。。。这不么,我争取从0到1讲一讲Leetcode 第10题怎么做。

先上题


Leetcode 10 Regular Expression Matching_第1张图片

就是字符串匹配,多俩条件

一是"."  "." 匹配任意单个字符

二是“*”  “*” 匹配星号之前的一个字符的0次到多次的重复出现。看好了斜体字,要有大学问呢。


好了 接下来就是匹配吧 怎么匹配呢?

首先我们确定一点,这个排序是连续排序 而且是从各自的起点开始的。这个没有问题吧?

好没有问题,什么意思呢,我们最优的可能一定是这样的

假设 s从0 到i p从0到j 对吧,我们就一个一个比较i和j的位置就可以了。

如果两个符号都没有,好说, s[i] == p[j]就是条件。

如果算上. 的话,p[j] == '.' 就不用看s[i]是什么了,肯定匹配。

好了 难点来了 "*" 怎么办。

我们之前说什么来着?

“*” 匹配星号之前的一个字符的0次到多次的重复出现。

什么意思?

一般来说两种情况咯?0次出现和1次以上出现。

为什么这么判断?

因为关键题目说了是一个字符的多次出现,如果是两个或者以上字符这道题目就麻烦了。

因为是一个字符的多次出现,所以我们可以有如下式子

假设p[j-1] == ‘*’  判断match[i][j]的条件是

s[i] match p[j-2] 就是新出来的这个字符匹配星号前面的字符。

s[i-1] matchp[j] 就是在s到i之前,已经形成匹配了。

注意哦 这个是很重要的一个点 因为一般来说 一个到多个匹配很难想 怎么样能够用一个式子表达这个关系,反正我自己之前做的时候是觉得很难得。

所以 这道题目的递推关系也就出来了


Leetcode 10 Regular Expression Matching_第2张图片

然后代码如下


Leetcode 10 Regular Expression Matching_第3张图片

欢迎大家指正 如果哪里我写的不清楚还请评论 我争取多阐述一下

你可能感兴趣的:(Leetcode 10 Regular Expression Matching)