mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
fix typo & highlight
This commit is contained in:
parent
ae45e708f5
commit
a329eed756
@ -37,13 +37,13 @@
|
|||||||
```
|
```
|
||||||
dp[i][j] = true 表示 s[0,1,..,i-1]和p[0,1,..,j-1]]能匹配上
|
dp[i][j] = true 表示 s[0,1,..,i-1]和p[0,1,..,j-1]]能匹配上
|
||||||
```
|
```
|
||||||
需要仔细考虑一下初始状态,首先我们知道两个空串是能匹配的,所以`dp[0][0]=true`,另外由于星号可匹配空串,所以如果`p[k] = '*'`,我们需要将`dp[0][k]初始化为``,...,k-1]`都是true。
|
需要仔细考虑一下初始状态,首先我们知道两个空串是能匹配的,所以`dp[0][0]=true`,另外由于星号可匹配空串,所以如果`p[0...k-1] = '*'`,我们需要将`dp[0][1...k]`初始化为true。
|
||||||
|
|
||||||
接下来就是状态转移方程,根据是否是星号有两种情况:
|
接下来就是状态转移方程,根据是否是星号有两种情况:
|
||||||
1. `p[j-1] == '*'`,那么p[j-1]既可以匹配掉当前s的字符s[i-1]也可以选择不匹配(即匹配空字符),即`p[i][j] = dp[i - 1][j] || dp[i][j - 1]`;
|
1. `p[j-1] == '*'`,那么p[j-1]既可以匹配掉当前s的字符s[i-1]也可以选择不匹配(即匹配空字符),即`p[i][j] = dp[i - 1][j] || dp[i][j - 1]`;
|
||||||
2. 否则,就只能看p[j-1]和s[i-1]是否能够硬性匹配了,而且还有考虑前面的匹配情况,即`dp[i][j] = (s[i - 1] == p[j - 1] || p[j - 1] == '?') && dp[i - 1][j - 1]`。
|
2. 否则,就只能看p[j-1]和s[i-1]是否能够硬性匹配了,而且还有考虑前面的匹配情况,即`dp[i][j] = (s[i - 1] == p[j - 1] || p[j - 1] == '?') && dp[i - 1][j - 1]`。
|
||||||
|
|
||||||
可见状态数组里的`dp[i][j]`只和其上(`dp[i - 1][j]`)、左上(`dp[i - 1][j - 1]`)、左(dp[i][j - 1])边的元素有关,所以我们可以考虑用滚动数组优化空间,以及剪枝(若上一行元素和当前行第一个元素dp[i][0]都为false的话直接返回false就可以了)。
|
可见状态数组里的`dp[i][j]`只和其上(`dp[i - 1][j]`)、左上(`dp[i - 1][j - 1]`)、左(`dp[i][j - 1]`)边的元素有关,所以我们可以考虑用滚动数组优化空间,以及剪枝(若上一行元素和当前行第一个元素dp[i][0]都为false的话直接返回false就可以了)。
|
||||||
|
|
||||||
时间复杂度O(mn)(亲测96ms),空间复杂度可优化至线性。
|
时间复杂度O(mn)(亲测96ms),空间复杂度可优化至线性。
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ dp[i][j] = true 表示 s[0,1,..,i-1]和p[0,1,..,j-1]]能匹配上
|
|||||||
|
|
||||||
此题还有一个比较难想但是亲测最快的方法。
|
此题还有一个比较难想但是亲测最快的方法。
|
||||||
|
|
||||||
基本的思路就是贪婪地一一匹配,如果在某处匹配失败了,那么回到最近的星号处,将本次该星号匹配的字符数加上1继续匹配,即若本次该星号匹配了k个字符,那么再多匹配一个字符匹配k+1个字符重新尝试匹配。
|
基本的思路就是**贪婪**地一一匹配,**如果在某处匹配失败了,那么回到最近的星号处,将本次该星号匹配的字符数加上1继续匹配**,即若本次该星号匹配了k个字符,那么再多匹配一个字符匹配k+1个字符重新尝试匹配。
|
||||||
|
|
||||||
为此我们用jStar来表示p串中星号的位置,还有用iStar表示星号匹配到s串中的最后位置,iStar和jStar均初始化为 -1,表示还没遇到星号。另外设置两个工作指针i和j分别指向s和p的当前字符,初始均为0。
|
为此我们用jStar来表示p串中星号的位置,还有用iStar表示星号匹配到s串中的最后位置,iStar和jStar均初始化为 -1,表示还没遇到星号。另外设置两个工作指针i和j分别指向s和p的当前字符,初始均为0。
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user