@@ -26,19 +26,19 @@ isMatch("aab", "c*a*b") → true
26
26
** Tags:** String, Dynamic Programming, Backtracking
27
27
28
28
29
- ## 思路0
29
+ ## 思路 0
30
30
31
- 题意是让让你从判断` s ` 字符串是否正则匹配于` p ` ,这道题和[ Wildcard Matching] [ 044 ] 很是相似,区别在于` * ` ,通配符的` * ` 是可以随意出现的,跟前面字符没有任何关系,其作用是可以表示任意字符串;而正则匹配的` * ` 不能单独存在,前面必须具有一个字符,其意义是表明前面的这个字符个数可以是任意个数,包括0个 。首先我们用递归的方式来实现,其思路如下:
31
+ 题意是让让你从判断 ` s ` 字符串是否正则匹配于 ` p ` ,这道题和[ Wildcard Matching] [ 044 ] 很是相似,区别在于 ` * ` ,通配符的 ` * ` 是可以随意出现的,跟前面字符没有任何关系,其作用是可以表示任意字符串;而正则匹配的 ` * ` 不能单独存在,前面必须具有一个字符,其意义是表明前面的这个字符个数可以是任意个数,包括 0 个 。首先我们用递归的方式来实现,其思路如下:
32
32
33
- * 如果` s ` 和 ` p ` 都为空,那么返回` true ` ;
33
+ * 如果 ` s ` 和 ` p ` 都为空,那么返回 ` true ` ;
34
34
35
- * 如果` p ` 的长度为1,当 ` s ` 的长度也为1 ,并且他们首位匹配则返回` true ` ,否则返回` false ` ;
35
+ * 如果 ` p ` 的长度为 1,当 ` s ` 的长度也为 1 ,并且他们首位匹配则返回 ` true ` ,否则返回 ` false ` ;
36
36
37
- * 如果` p ` 的第二个字符不为 '* ',如果` s ` 为空,那就返回` false ` ,首位匹配则返回递归调用他们去掉首位的子字符串,否则返回` false ` ;
37
+ * 如果 ` p ` 的第二个字符不为 '* ',如果 ` s ` 为空,那就返回 ` false ` ,首位匹配则返回递归调用他们去掉首位的子字符串,否则返回 ` false ` ;
38
38
39
- * 如果` p ` 的第二个字符为 '* ',循环当` s ` 不为空,且首位匹配,如果递归调用是否匹配` s ` 字符串和` p ` 去掉前两位的子字符串,则返回` true ` ,否则` s ` 去掉首字母继续循环;
39
+ * 如果 ` p ` 的第二个字符为 '* ',循环当 ` s ` 不为空,且首位匹配,如果递归调用是否匹配 ` s ` 字符串和 ` p ` 去掉前两位的子字符串,则返回 ` true ` ,否则 ` s ` 去掉首字母继续循环;
40
40
41
- * 返回递归调用` s ` 字符串和` p ` 去掉前两位的子字符串是否匹配。
41
+ * 返回递归调用 ` s ` 字符串和 ` p ` 去掉前两位的子字符串是否匹配。
42
42
43
43
``` java
44
44
class Solution {
@@ -64,15 +64,15 @@ class Solution {
64
64
```
65
65
66
66
67
- ## 思路1
67
+ ## 思路 1
68
68
69
69
我们可以把上面的思路更简单化,如下:
70
70
71
- * 如果` s ` 和 ` p ` 都为空,那么返回` true ` ;
71
+ * 如果 ` s ` 和 ` p ` 都为空,那么返回 ` true ` ;
72
72
73
- * 如果` p ` 的第二个字符为` * ` ,由于` * ` 前面的字符个数可以为任意,那么我们先递归调用个数为0的情况 ;或者当` s ` 不为空,如果他们的首字母匹配,那么我们就递归调用去掉去掉首字母的` s ` 和完整的` p ` ;
73
+ * 如果 ` p ` 的第二个字符为 ` * ` ,由于 ` * ` 前面的字符个数可以为任意,那么我们先递归调用个数为 0 的情况 ;或者当 ` s ` 不为空,如果他们的首字母匹配,那么我们就递归调用去掉去掉首字母的 ` s ` 和完整的 ` p ` ;
74
74
75
- * 如果` p ` 的第二个字符不为` * ` ,那么我们就老老实实判断第一个字符是否匹配并且递归调用他们去掉首位的子字符串。
75
+ * 如果 ` p ` 的第二个字符不为 ` * ` ,那么我们就老老实实判断第一个字符是否匹配并且递归调用他们去掉首位的子字符串。
76
76
77
77
``` java
78
78
class Solution {
@@ -89,13 +89,13 @@ class Solution {
89
89
}
90
90
```
91
91
92
- ## 思路2
92
+ ## 思路 2
93
93
94
- 另一种思路就是动态规划了,我们定义` dp[i][j] ` 的真假来表示` s[0..i) ` 是否匹配` p[0..j) ` ,通过思路1 ,我们可以确定其状态转移方程如下所示:
94
+ 另一种思路就是动态规划了,我们定义 ` dp[i][j] ` 的真假来表示 ` s[0..i) ` 是否匹配 ` p[0..j) ` ,通过思路 1 ,我们可以确定其状态转移方程如下所示:
95
95
96
- * 如果` p[j - 1] == '*' ` , ` dp[i][j] = dp[i][j - 2] || (pc[j - 2] == sc[i - 1] || pc[j - 2] == '.') && dp[i - 1][j]; ` ;
96
+ * 如果 ` p[j - 1] == '*' ` , ` dp[i][j] = dp[i][j - 2] || (pc[j - 2] == sc[i - 1] || pc[j - 2] == '.') && dp[i - 1][j]; ` ;
97
97
98
- * 如果` p[j - 1] != '*' ` ,` dp[i][j] = dp[i - 1][j - 1] && (pc[j - 1] == '.' || pc[j - 1] == sc[i - 1]); ` 。
98
+ * 如果 ` p[j - 1] != '*' ` ,` dp[i][j] = dp[i - 1][j - 1] && (pc[j - 1] == '.' || pc[j - 1] == sc[i - 1]); ` 。
99
99
100
100
``` java
101
101
class Solution {
0 commit comments