Skip to content

Commit 8b7d69a

Browse files
committed
139.单词拆分
1 parent 44dd43d commit 8b7d69a

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

leetcode_Java/DoneTitle.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
130. 被围绕的区域
3636
131. 分割回文串
3737
136. 只出现一次的数字
38+
139. 单词拆分
3839
141. 环形链表
3940
144. 二叉树的前序遍历
4041
145. 二叉树的后序遍历

leetcode_Java/Solution0139.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// 139. 单词拆分
2+
3+
4+
/*
5+
动态规划:
6+
1、dp[i]表示前i个字符是否能由单词拼出
7+
2、初始化:dp[0] = true,方便递推判断
8+
3、状态转移方程:dp[i] = dp[j] && wordDict.contains(s.substring(j, i))
9+
4、遍历顺序:固定未知位置,由前面已知推断当前结果。固定第i个字符的位置,然后从头开始遍历到i位置,判断s[0,j)和s[j,i)是否能由单词拼出
10+
5、当dp[i]找到一个成功结果时就可以结束循环了
11+
6、i、j的使用:两个for循环中i、j是用于遍历dp数组的,表示dp数组的索引,dp数组的长度比字符串s 大1,用于初始化,字符串s要用i、j时需要根据情况转换成s对应的索引
12+
13+
dp □□□□□□
14+
索引 012345
15+
s apple
16+
索引 01234
17+
位置 12345
18+
*/
19+
class Solution {
20+
public boolean wordBreak(String s, List<String> wordDict) {
21+
int n = s.length();
22+
boolean[] dp = new boolean[n + 1];
23+
dp[0] = true;
24+
for (int i = 1; i <= n; i++) {
25+
for (int j = 0; j < i; j++) {
26+
if (dp[j] && wordDict.contains(s.substring(j, i))) {
27+
dp[i] = true;
28+
break;
29+
}
30+
}
31+
}
32+
return dp[n];
33+
}
34+
}
35+
36+
37+
/*
38+
动态规划:
39+
1、dp[i]表示前i个字符是否能由单词拼出
40+
2、初始化:dp[0] = true,方便递推判断
41+
3、状态转移方程:dp[m] = dp[i] && m <= n && s.startsWith(word, i)
42+
4、遍历顺序:固定已知位置,推断后面位置结果。固定第i个字符的位置,且该位置能由单词拼出,然后遍历单词数组,判断扩增一个单词长度的子串是否为s的子串,是则该子串能由单词拼出
43+
*/
44+
class Solution {
45+
public boolean wordBreak(String s, List<String> wordDict) {
46+
int n = s.length();
47+
boolean[] dp = new boolean[n + 1];
48+
dp[0] = true;
49+
for (int i = 0; i < n; i++) {
50+
if (!dp[i]) {
51+
continue;
52+
}
53+
for (String word : wordDict) {
54+
int m = i + word.length();
55+
if (m <= n && s.startsWith(word, i)) {
56+
dp[m] = true;
57+
}
58+
}
59+
}
60+
return dp[n];
61+
}
62+
}

0 commit comments

Comments
 (0)