Skip to content

Commit 9a42dc8

Browse files
Added solution for Word breaks.
1 parent ffd5540 commit 9a42dc8

File tree

3 files changed

+88
-57
lines changed

3 files changed

+88
-57
lines changed

level_medium/WordBreak_1.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
function wordBreak(s: string, wordDict: string[]): boolean {
2+
const result: {[k: number]: boolean} = {}
3+
wordDict.forEach(word => result[word.length] = true)
4+
const dictSizes = Object.keys(result).map(l => parseInt(l));
5+
const wordSet = new Set(wordDict);
6+
7+
// Init the DP table for memoization and solve recursively.
8+
const dp: boolean[][] = Array.from({length: s.length})
9+
return wordBreakHelper(s, wordSet, dictSizes, 0, s.length, dp)
10+
};
11+
12+
function wordBreakHelper(s: string, wordSet: Set<string>, dictSizes: number[], beg: number, end: number, dp: boolean[][]): boolean {
13+
14+
// Base Condition, returns true.
15+
if (beg >= end) {
16+
return true;
17+
}
18+
19+
for (let idx = 0; idx < dictSizes.length; idx++) {
20+
const gap = dictSizes[idx];
21+
const term = beg + gap;
22+
if (term <= end && contains(s, wordSet, beg, term)) {
23+
24+
// Init dp.
25+
dp[term] = dp[term] || [];
26+
27+
if (dp[term][end] === undefined) {
28+
dp[term][end] = wordBreakHelper(s, wordSet, dictSizes, term, end, dp)
29+
}
30+
31+
if (dp[term][end]) {
32+
dp[beg] = dp[beg] || [];
33+
dp[beg][end] = true;
34+
return dp[beg][end];
35+
}
36+
}
37+
}
38+
39+
dp[beg] = dp[beg] || [];
40+
dp[beg][end] = false;
41+
return dp[beg][end];
42+
}
43+
44+
function contains(s: string, wordSet: Set<string>, beg: number, end: number) {
45+
const slice = s.slice(beg, end)
46+
console.log(slice)
47+
return wordSet.has(slice);
48+
}

level_medium/WordBreak_2.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
function wordBreak(s: string, wordDict: string[]): boolean {
2+
const wordSet = new Set(wordDict);
3+
const dp: boolean[][] = Array.from({length: s.length})
4+
return wordBreakHelper(s, wordSet, 0, s.length, dp)
5+
};
6+
7+
function wordBreakHelper(s: string, wordSet: Set<string>, beg: number, end: number, dp: boolean[][]): boolean {
8+
9+
// Base Condition, returns true.
10+
if (beg >= end) {
11+
return true;
12+
}
13+
14+
for (let term = beg + 1; term <= end; term++) {
15+
if (term <= end && contains(s, wordSet, beg, term)) {
16+
17+
// Init dp.
18+
dp[term] = dp[term] || [];
19+
20+
if (dp[term][end] === undefined) {
21+
dp[term][end] = wordBreakHelper(s, wordSet, term, end, dp)
22+
}
23+
24+
if (dp[term][end]) {
25+
dp[beg] = dp[beg] || [];
26+
dp[beg][end] = true;
27+
return dp[beg][end];
28+
}
29+
}
30+
}
31+
32+
dp[beg] = dp[beg] || [];
33+
dp[beg][end] = false;
34+
return dp[beg][end];
35+
}
36+
37+
function contains(s: string, wordSet: Set<string>, beg: number, end: number) {
38+
const slice = s.slice(beg, end)
39+
return wordSet.has(slice);
40+
}

package-lock.json

Lines changed: 0 additions & 57 deletions
This file was deleted.

0 commit comments

Comments
 (0)