Q10 Regular Expression Matching

问题:here
代码:here
思路:这道题有两个解法,第一个是递归,第二个是动态规划。
解法1
当我们没有*的时候,问题其实是非常简单的,就是从左到右比较sp两个字符串就可以了。但是当有了*的时候,就要分两种情况讨论了:1 *让它前面的数字重复0次;2 *让它前面的数字重复一次以上。我们的程序就在遇到有*的情况时不断的二分下去就可以了,并返回每一个分支的结果。当然,虽然说这个是递归的方法,但是本质上因为递归之间存在因果关系,所以这个也可以说是一种动态规划吧。
解法2
考虑到这是一个常规的问题,我们有理由相信可以使用动态规划来求解这个问题。我们使用states[i][j]来表示s[i:]和p[j:]是否匹配,那么我们就可以从后往前一步一步的推导;当然,同解法1一样,我们再遇到*时也需要考虑两种情况。

猜你喜欢

转载自blog.csdn.net/m0_37518259/article/details/80656217