Skip to content

Commit e7ef6f9

Browse files
authored
Merge pull request #1513 from hoyeongkwak/main
[hoyeongkwak] Week 8 Solutions
2 parents 2d4bafc + 04fe29a commit e7ef6f9

File tree

5 files changed

+96
-0
lines changed

5 files changed

+96
-0
lines changed

clone-graph/hoyeongkwak.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Definition for _Node.
3+
* class _Node {
4+
* val: number
5+
* neighbors: _Node[]
6+
*
7+
* constructor(val?: number, neighbors?: _Node[]) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.neighbors = (neighbors===undefined ? [] : neighbors)
10+
* }
11+
* }
12+
*
13+
*/
14+
15+
/*
16+
*/
17+
function cloneGraph(node: _Node | null): _Node | null {
18+
const clones = new Map<_Node, _Node>()
19+
const dfs = (n: _Node) => {
20+
if (n === null) return n
21+
22+
if (clones.has(n)) {
23+
return clones.get(n)
24+
}
25+
26+
const copy = new _Node(n.val)
27+
clones.set(n, copy)
28+
29+
for (const neighbor of n.neighbors) {
30+
copy.neighbors.push(dfs(neighbor))
31+
}
32+
return copy
33+
}
34+
return dfs(node)
35+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
function longestCommonSubsequence(text1: string, text2: string): number {
2+
const m1 = text1.length
3+
const m2 = text2.length
4+
5+
const dp: number[][] = Array(m1 + 1).fill(null).map(() => Array(m2 + 1).fill(0))
6+
7+
for (let r = 1; r <= m1; r++) {
8+
for (let c = 1; c <= m2; c++) {
9+
if (text1[r - 1] === text2[c - 1]) {
10+
dp[r][c] = dp[r - 1][c - 1] + 1
11+
} else {
12+
dp[r][c] = Math.max(dp[r - 1][c], dp[r][c - 1])
13+
}
14+
}
15+
}
16+
return dp[m1][m2]
17+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function characterReplacement(s: string, k: number): number {
2+
/*
3+
4+
*/
5+
let maxLen = 0
6+
let maxCnt = new Map<string, number>()
7+
let start = 0
8+
let maxFreq = 0
9+
for (let e = 0; e < s.length; e++) {
10+
maxCnt.set(s[e], (maxCnt.get(s[e]) || 0) + 1)
11+
maxFreq = Math.max(maxFreq, maxCnt.get(s[e]))
12+
while (e - start + 1 - maxFreq > k) {
13+
maxCnt.set(s[start], maxCnt.get(s[start]) - 1)
14+
start += 1
15+
}
16+
maxLen = Math.max(e - start + 1, maxLen)
17+
}
18+
return maxLen
19+
};

palindromic-substrings/hoyeongkwak.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function countSubstrings(s: string): number {
2+
const sLen = s.length;
3+
const dp = Array(sLen).fill(null).map(() => Array(sLen).fill(false))
4+
let cnt = 0
5+
6+
for (let i = sLen - 1; i >= 0; i--) {
7+
for (let j = i; j < sLen; j++) {
8+
if (i === j) {
9+
dp[i][j] = true
10+
} else if (j === i + 1) {
11+
dp[i][j] = (s[i] === s[j])
12+
} else {
13+
dp[i][j] = (s[i] === s[j]) && dp[i + 1][j - 1]
14+
}
15+
16+
if (dp[i][j]) cnt++
17+
}
18+
}
19+
return cnt
20+
};

reverse-bits/hoyeongkwak.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function reverseBits(n: number): number {
2+
const binaryStr = n.toString(2).padStart(32, '0')
3+
const reverseNum = binaryStr.split('').reverse().join('')
4+
return parseInt(reverseNum, 2)
5+
};

0 commit comments

Comments
 (0)