Skip to content

Commit f35b925

Browse files
authored
Update Readme.md
1 parent 2ddfcc8 commit f35b925

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

Trie/139.Word-Break/Readme.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
### 139.Word-Break
22

3-
此题只要能想到用DP来做,就是成功的关键.
3+
#### 解法1: DP
44

5-
本题和```322.Coin Change```很相似.要使得dp[i]能够成功,必然是需要找到一个小于i的序号j,使得s[j:i]恰是一个单词,并且dp[j-1]也能成功.所以遍历一下j即可.于是动态转移方程就写出来了,时间复杂度是o(n^2).
5+
本题和```322.Coin Change```很相似,令dp[i]表示前i个字符是否能够break成功。转移方法是找到一个小于i的序号j,使得s[j:i]恰是一个单词并且dp[j-1]也能成功所以遍历一下j即可
66

77
初始条件需要稍微注意一下.此题里,改成1-index更加方便,这样初始条件就是dp[0]需要设置为True即可.
88

99
补充:相比于在内层循环中遍历j的位置,有一种更高效的方法。就是在内存循环中遍历wordDict,查看是否有任何一个单词word能够匹配s[0:i]的后缀。这种解法在s很长而wordDict很小的情况下,优势非常明显。
1010

11+
#### 解法2:DFS+Trie
12+
我们将所有的单词构建一棵字典树。我们从前往后遍历字符串,如果发现字符串的某段前缀[0:i]对应着Trie中的一个单词,那么我们就可以从对前缀之后的子串[i+1:n-1]进行递归处理。直至发现恰好递归到字符串尾部。
1113

12-
[Leetcode Link](https://leetcode.com/problems/word-break)
14+
注意DFS要配合记忆化使用,用memo[i]来标记[i:n-1]是否能够已经失败过。
15+
16+
[Leetcode Link](https://leetcode.com/problems/word-break)

0 commit comments

Comments
 (0)