@@ -141,7 +141,8 @@ public static boolean process2(char[] str, char[] pattern, int si, int pi, int[]
141
141
}
142
142
143
143
// 以下的代码是课后的优化
144
- // 有代码逻辑精简的优化,还包含一个重要的斜率优化,请先理解课上的内容
144
+ // 有代码逻辑精简的优化,还包含一个重要的枚举行为优化
145
+ // 请先理解课上的内容
145
146
public static boolean isMatch3 (String s , String p ) {
146
147
if (s == null || p == null ) {
147
148
return false ;
@@ -151,33 +152,34 @@ public static boolean isMatch3(String s, String p) {
151
152
return isValid (str , pattern ) && process3 (str , pattern , 0 , 0 );
152
153
}
153
154
154
- // 举例说明斜率优化:
155
+ // 举例说明枚举行为优化
155
156
// 求状态(si = 3, pi = 7)时,假设状况如下
156
- // str : a a a b ...
157
- // si : 3 4 5 6 ...
158
- // pat : a * ? ...
159
- // pi : 7 8 9 ...
160
- // 状态(si = 3, pi = 7)的底层会依赖 :
161
- // 状态(si = 3, pi = 9)
162
- // 状态(si = 4, pi = 9)
163
- // 状态(si = 5, pi = 9)
164
- // 状态(si = 6, pi = 9)
157
+ // str : a a a b ...
158
+ // si : 3 4 5 6 ...
159
+ // pat : a * ? ...
160
+ // pi : 7 8 9 ...
161
+ // 状态(si = 3, pi = 7)会依赖 :
162
+ // 状态(si = 3, pi = 9)
163
+ // 状态(si = 4, pi = 9)
164
+ // 状态(si = 5, pi = 9)
165
+ // 状态(si = 6, pi = 9)
165
166
//
166
167
// 求状态(si = 2, pi = 7)时,假设状况如下
167
- // str : a a a a b ...
168
- // si : 2 3 4 5 6 ...
169
- // pat : a * ? ...
170
- // pi : 7 8 9 ...
171
- // 状态(si = 2, pi = 7)的底层会依赖:
172
- // 状态(si = 2, pi = 9)
173
- // 状态(si = 3, pi = 9)
174
- // 状态(si = 4, pi = 9)
175
- // 状态(si = 5, pi = 9)
176
- // 状态(si = 6, pi = 9)
177
- //
178
- // 注意看状态(si = 2, pi = 7)底层依赖的后4个,其实就是状态(si = 3, pi = 7)
179
- // 所以,状态(si = 2, pi = 7)的底层依赖可以化简为:
180
- // 状态(si = 2, pi = 9)、状态(si = 3, pi = 7)
168
+ // str : a a a a b ...
169
+ // si : 2 3 4 5 6 ...
170
+ // pat : a * ? ...
171
+ // pi : 7 8 9 ...
172
+ // 状态(si = 2, pi = 7)会依赖:
173
+ // 状态(si = 2, pi = 9)
174
+ // 状态(si = 3, pi = 9)
175
+ // 状态(si = 4, pi = 9)
176
+ // 状态(si = 5, pi = 9)
177
+ // 状态(si = 6, pi = 9)
178
+ //
179
+ // 注意看状态(si = 2, pi = 7)依赖的后4个,其实就是状态(si = 3, pi = 7)
180
+ // 所以状态(si = 2, pi = 7)的依赖可以化简为:
181
+ // 状态(si = 2, pi = 9)
182
+ // 状态(si = 3, pi = 7)
181
183
// 这样枚举行为就被化简成了有限两个状态,详细情况看代码
182
184
public static boolean process3 (char [] str , char [] pattern , int si , int pi ) {
183
185
if (si == str .length && pi == pattern .length ) {
@@ -192,14 +194,14 @@ public static boolean process3(char[] str, char[] pattern, int si, int pi) {
192
194
if (pi + 1 >= pattern .length || pattern [pi + 1 ] != '*' ) {
193
195
return ((str [si ] == pattern [pi ]) || (pattern [pi ] == '.' )) && process3 (str , pattern , si + 1 , pi + 1 );
194
196
}
195
- // 此处为斜率优化 ,含义看函数注释
197
+ // 此处为枚举行为优化 ,含义看函数注释
196
198
if ((str [si ] == pattern [pi ] || pattern [pi ] == '.' ) && process3 (str , pattern , si + 1 , pi )) {
197
199
return true ;
198
200
}
199
201
return process3 (str , pattern , si , pi + 2 );
200
202
}
201
203
202
- // 以下的代码是斜率优化后的尝试函数 ,改成动态规划的解
204
+ // 以下的代码是枚举行为优化后的尝试函数 ,改成动态规划的解
203
205
// 请先理解基础班中"暴力递归改动态规划"的内容
204
206
// 如果str长度为N,pattern长度为M,最终时间复杂度为O(N*M)
205
207
public static boolean isMatch4 (String str , String pattern ) {
0 commit comments