题目描述(困难难度)

    字符串匹配,? 匹配单个任意字符,* 匹配任意长度字符串,包括空串。和有些类似。

    解法一 动态规划

    直接按照之前第 10 题,修改一下就可以了。

    同样是用 dp[i][j] 表示所有的情况,然后一层一层的根据递推关系求出来。

    时间复杂度:text 长度是 T,pattern 长度是 P,那么就是 O(TP)。

    空间复杂度:O(TP)。

    时间复杂度:text 长度是 T,pattern 长度是 P,那么就是 O(TP)。

    空间复杂度:O(P)。

    解法二 迭代

    参考,也比较好理解,利用两个指针进行遍历。

    时间复杂度:如果 str 长度是 T,pattern 长度是 P,虽然只有一个 while 循环,但是 s 并不是每次都加 1,所以最坏的时候时间复杂度会达到 O(TP),例如 str = “bbbbbbbbbb”,pattern = “*bbbb”。每次 pattern 到最后时,又会重新开始到开头。

    空间复杂度:O(1)。

    递归

    如果非要用递归的话,可以按照动态规划那个思路,先压栈,然后出栈过程其实就是动态规划那样了。所以其实不如直接动态规划。

    动态规划的应用,理清递推的公式就可以。另外迭代的方法,也让人眼前一亮。

    添加好友一起进步~

    如果觉得有帮助的话,可以点击 这里 给一个 star 哦 ^^