@@ -151,9 +151,9 @@ _____
151
151
* [x] Palindrome Partitioning II
152
152
* [x] Word Break
153
153
* [x] Decode Ways
154
- * [x] Longest Palindromic Substring
155
154
* [x] Maximum Subarray(勉强)
156
155
* [x] LIS
156
+ * [x] Longest Palindrome Substring(上课题没用)
157
157
158
158
-----
159
159
@@ -236,17 +236,17 @@ _____
236
236
* initialize: ``` dp[0] = True ``` | ``` dp[0] = 0 ```
237
237
* answer: ``` dp[N-1] ```
238
238
239
- ######[ Palindrom Partitioning II] ( ./Leetcode/Palindrome_Partitioning_II.py )
240
- * state: ``` dp[i] ``` 表示前i个字符组成的字符串需要最少几次cut
239
+ ######[ Palindrome Partitioning II] ( ./Leetcode/Palindrome_Partitioning_II.py )
240
+ * state: ``` dp[i] ``` 表示前i-1个字符组成的字符串需要最少几次cut
241
241
* function: ``` dp[i] = min( dp[j]+1, j<i and j+1 ~ i 这一段是一个palindrome ``` ) (这里需要用另外一个数组来储存是否是palindrome))
242
- * initialize: ``` dp[0] = -1 ``` (这里好像也不太对)
243
- * answer: ``` dp[N] ``` (这里有些不一样)
242
+ * initialize: ``` dp[0] = N -1 ``` 最少N-1次cut就行了
243
+ * answer: ``` dp[N]-1 ``` (这里有些不一样,主要原因是 )
244
244
245
245
######[ Word Break] ( ./Leetcode/Word_Break.py )
246
- * state: ``` dp[i] ``` 表示前i个字符能否被完美切分
246
+ * state: ``` dp[i] ``` 表示前i-1个字符能否被完美切分
247
247
* function: ``` dp[i] = for j in (i-1 ... 0) if dp[j] and j ~ i是一个字典中的单词) ```
248
248
* initialize: ``` dp[0] = True ```
249
- * answer: ``` dp[N] ``` (这里也是比较特殊)
249
+ * answer: ``` dp[N] ``` (这里也是比较特殊,因为是i-1个字符,不能从0算起 )
250
250
251
251
注意j的枚举 -> 枚举单词长度
252
252
O(NL) N: 字符串长度 L:最长单词的长度
@@ -259,7 +259,7 @@ _____
259
259
任何一个位置都可能为开始, 所以所有都要初始化为1, 因为最少LIS是1
260
260
261
261
######[ Decode Ways] ( ./Leetcode/Decode_Ways.py )
262
- * state: ``` dp[i] ``` 表示前i个数字的DW
262
+ * state: ``` dp[i] ``` 表示前i-1个数字的DW
263
263
* function:
264
264
265
265
``` python
@@ -268,7 +268,7 @@ _____
268
268
+= dp[i- 2 ] # if 10 <= int(A[i-2:i]) <= 26
269
269
```
270
270
* initialize: ``` dp[0] = 1 ```
271
- * answer: ``` dp[N] ``` (这里比较特殊)
271
+ * answer: ``` dp[N] ``` (这里比较特殊,因为是前i-1个数字,且dp [ 0 ] 只是作为一个起始数字来的 )
272
272
273
273
-----
274
274
@@ -288,7 +288,7 @@ _____
288
288
= max (dp[i][j- 1 ],dp[i- 1 ][j]) # if a[i-1] != b[j-1]
289
289
```
290
290
* initialize: ``` dp[i][0] = 0, dp[0][j] = 0 ```
291
- * answer: ``` dp[len(a)][len(b) ] ```
291
+ * answer: ``` dp[M][N ] ```
292
292
293
293
######[ Longest Common Substring] ( ./Interviews/Longest_Common_Substring.py ) [ (Not in Leetcode)] ( http://www.geeksforgeeks.org/longest-common-substring/ )
294
294
* state: ``` dp[i][j] ``` 表示前i个字符配上前j个字符的LCS的长度(一定以第i个和第j个结尾的LCS)
@@ -310,7 +310,7 @@ _____
310
310
= min (dp[i- 1 ][j- 1 ], dp[i- 1 ][j], dp[i][j- 1 ])) + 1 # if a[i] != b[j]
311
311
```
312
312
* initialize: ``` dp[i][0] = i, dp[0][j] = j ```
313
- * answer: ``` dp[len(a)][len(b) ] ```
313
+ * answer: ``` dp[M][N ] ```
314
314
315
315
######[ Distinct Subsequence] ( ./Leetcode/Distinct_Subsequences.py ) (需要再领会一下)
316
316
* state: ``` dp[i][j] ``` 表示T的前i个字符和S的前j个字符的DS个数
@@ -360,9 +360,19 @@ _____
360
360
####7 . Knapsack
361
361
362
362
363
- ###复杂度
364
- * 一个变量 O(n)
365
- * 两个变量 O(n^2)
363
+ ###总结
364
+
365
+ ####复杂度
366
+ 直接看循环嵌套个数
367
+
368
+ ####关于取dp[ N] 还是dp[ N-1] 还有dp[ N] -1
369
+ 1 . 首先先分析dp维度,Matrix和Two Sequence dp都是二维,One Sequence是一维
370
+ 2 . Matrix dp一般都是初始(0,0)跳到(M-1,N-1)所以取的是``` dp[M-1][N-1] ```
371
+ 3 . 如果dp[ i] 或者dp[ i] [ j ] 表示前i个什么的时候,需要以N/MN作为结尾,主要原因是这种情况下前0个字符串是没有意义的,至少从1开始,所以取dp的时候也是从dp[ 1] 开始才有意义,所以dp[ i] 的含义是前i-1个东西的性质,而``` dp[0] or dp[0][0] ``` 需要强制赋值
372
+ 4 . 至于dp[ N] - 1纯粹是因为Palindrome题目比较特殊,实际我们算的cut-1才是结果
373
+
374
+ ####关于已知dp题然后回问方法数问题
375
+ 一般这种情况就是根据已知的dp matrix和结论,从最后开始往前回溯,满足的就挑进去,不满足的就不放来解决.
366
376
367
377
-----
368
378
@@ -636,7 +646,7 @@ __去想关于数据结构的题目的时候, 只需要考虑数据结构里处
636
646
* [ ] Word Ladder II
637
647
* [ ] decode ways
638
648
* [ ] Median of two sorted arrays
639
- * [ ] Longest Palindromic Substring
649
+ * [ ] Longest Palindrome Substring
640
650
* [ ] Regular Expression Matching
641
651
* [ ] Wildcard Matching
642
652
* [ ] Max Points on a Line
@@ -696,3 +706,7 @@ c-a| = 2(a-c) )
696
706
697
707
698
708
证明写的有点乱 求大神更好更清楚的证明
709
+
710
+
711
+ ##Some Note
712
+ 1 . 一定要看清题,比如这次就被问了find all palindrome,但是理解成palindrome partitioning了,所以错了
0 commit comments