Skip to content

Commit 30250fe

Browse files
committed
add Word Break solution
1 parent 8381eeb commit 30250fe

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

word-break/HoonDongKang.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* [Problem]: [139] Word Break
3+
* (https://leetcode.com/problems/word-break/description/)
4+
*/
5+
function wordBreak(s: string, wordDict: string[]): boolean {
6+
//시간복잡도: O(n^2)
7+
//공간복잡도: O(n)
8+
function dfsFunc(s: string, wordDict: string[]): boolean {
9+
let wordSet = new Set(wordDict);
10+
let memo = new Map<number, boolean>();
11+
12+
function dfs(start: number): boolean {
13+
if (start === s.length) return true;
14+
if (memo.has(start)) return memo.get(start)!;
15+
16+
for (let end = start + 1; end <= s.length; end++) {
17+
const word = s.slice(start, end);
18+
19+
if (wordSet.has(word) && dfs(end)) {
20+
memo.set(start, true);
21+
return true;
22+
}
23+
}
24+
25+
memo.set(start, false);
26+
return false;
27+
}
28+
29+
return dfs(0);
30+
}
31+
32+
//시간복잡도: O(n^2)
33+
//공간복잡도: O(n)
34+
function dpFunc(s: string, wordDict: string[]): boolean {
35+
const wordSet = new Set(wordDict);
36+
const dp = new Array(s.length + 1).fill(false);
37+
dp[0] = true;
38+
39+
for (let end = 1; end <= s.length; end++) {
40+
for (let start = 0; start < end; start++) {
41+
const isExists = wordSet.has(s.slice(start, end));
42+
if (isExists && dp[start]) {
43+
dp[end] = true;
44+
break;
45+
}
46+
}
47+
}
48+
return dp[s.length];
49+
}
50+
return dpFunc(s, wordDict);
51+
}

0 commit comments

Comments
 (0)