Mickey's Blog ·

【leetCode】正则匹配DP解法分析

今天找了CPP的同学输出了一个例子看了一下这个表格。CPP直接查看内存中的变量调试,还真是方便呀。

输入

s=abccg

p=abcdg

得出的DP数组为

无标题.png

我们观察标记true和false。

对于匹配符 :左侧空格 或 上侧空格 或 修饰的字符匹配当前字符成功

对于非*匹配符: 左上侧空格 且 自己匹配当前字符成功

我们发现他是根据你前面的匹配成功与否影响接下来的匹配,同时一个正确命中的s和p其实可以有很多种组合来命中

就比如

s=abccg

p= abc.g

这个输入时匹配成功的,但其实有三种匹配方式

第一种 (s) (p)

        a =>a

        b =>b

        cc=>c*

        '' =>.*

        g =>g

第二种 (s) (p)

        a =>a

        b =>b

        c=>c*

        c =>.*

        g =>g

第三种 (s) (p)

        a =>a

        b =>b

        '' =>c*

        cc=>.*

        g =>g

这三种情况都是可以匹配成功的,所以他判断的方式有很多,我们现在从答案很好分析他是如何解答的,但是其实正向的写出这些判断条件还是有些迷,等之后我会专门研究一下动态规划然后重新解这题。