Skip to content

Commit 3713900

Browse files
authored
Merge pull request #1665 from hoyeongkwak/main
[hoyeongkwak] Week15 Solutions
2 parents a7004da + b793697 commit 3713900

File tree

4 files changed

+141
-0
lines changed

4 files changed

+141
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
function buildTree(preorder: number[], inorder: number[]): TreeNode | null {
16+
if (preorder == null || inorder == null || preorder.length === 0 || inorder.length === 0) {
17+
return null
18+
}
19+
20+
const inorderMap = new Map()
21+
for (let i = 0 ; i < inorder.length; i++) {
22+
inorderMap.set(inorder[i], i)
23+
}
24+
25+
const build = (preStart, preEnd, inStart, inEnd): TreeNode => {
26+
if (preStart > preEnd || inStart > inEnd) {
27+
return null
28+
}
29+
30+
const rootVal = preorder[preStart]
31+
const root = new TreeNode(rootVal)
32+
33+
const rootIndex = inorderMap.get(rootVal)
34+
const leftSize = rootIndex - inStart
35+
36+
root.left = build(
37+
preStart + 1,
38+
preStart + leftSize,
39+
inStart,
40+
rootIndex - 1
41+
)
42+
43+
root.right = build(
44+
preStart + leftSize + 1,
45+
preEnd,
46+
rootIndex + 1,
47+
inEnd
48+
)
49+
return root
50+
}
51+
return build(0, preorder.length - 1, 0, inorder.length - 1)
52+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
function longestPalindrome(s: string): string {
2+
if (s.length < 2) {
3+
return s
4+
}
5+
let maxStart = 0
6+
let maxEnd = 0
7+
for (let i = 0 ; i < s.length; i++) {
8+
let start = i
9+
let end = i
10+
while (0 <= start && end < s.length && s[start] === s[end]) {
11+
if (end - start > maxEnd - maxStart) {
12+
maxStart = start
13+
maxEnd = end
14+
}
15+
start--
16+
end++
17+
}
18+
19+
start = i
20+
end = i + 1
21+
while (0 <= start && end <s.length && s[start] === s[end]) {
22+
if (end - start > maxEnd - maxStart) {
23+
maxStart = start
24+
maxEnd = end
25+
}
26+
start--
27+
end++
28+
}
29+
}
30+
return s.slice(maxStart, maxEnd + 1)
31+
};

rotate-image/hoyeongkwak.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
function longestPalindrome(s: string): string {
2+
if (s.length < 2) {
3+
return s
4+
}
5+
let maxStart = 0
6+
let maxEnd = 0
7+
for (let i = 0 ; i < s.length; i++) {
8+
let start = i
9+
let end = i
10+
while (0 <= start && end < s.length && s[start] === s[end]) {
11+
if (end - start > maxEnd - maxStart) {
12+
maxStart = start
13+
maxEnd = end
14+
}
15+
start--
16+
end++
17+
}
18+
19+
start = i
20+
end = i + 1
21+
while (0 <= start && end <s.length && s[start] === s[end]) {
22+
if (end - start > maxEnd - maxStart) {
23+
maxStart = start
24+
maxEnd = end
25+
}
26+
start--
27+
end++
28+
}
29+
}
30+
return s.slice(maxStart, maxEnd + 1)
31+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
function isSubtree(root: TreeNode | null, subRoot: TreeNode | null): boolean {
16+
if (!subRoot) return true
17+
if (!root) return false
18+
19+
const isSameTree = (p, q): boolean => {
20+
if (!(p && q)) return p === q
21+
if (p.val !== q.val) return false
22+
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
23+
}
24+
25+
if (isSameTree(root, subRoot)) return true
26+
return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot)
27+
};

0 commit comments

Comments
 (0)