From 1e14edd1ae4edf9591022788b6c1c9510a7e406e Mon Sep 17 00:00:00 2001 From: Jeehay28 Date: Mon, 7 Jul 2025 17:29:19 +0900 Subject: [PATCH 1/4] Add subtree-of-another-tree solution in TS --- subtree-of-another-tree/Jeehay28.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 subtree-of-another-tree/Jeehay28.ts diff --git a/subtree-of-another-tree/Jeehay28.ts b/subtree-of-another-tree/Jeehay28.ts new file mode 100644 index 000000000..3f91ce60d --- /dev/null +++ b/subtree-of-another-tree/Jeehay28.ts @@ -0,0 +1,29 @@ +class TreeNode { + val: number; + left: TreeNode | null; + right: TreeNode | null; + constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { + this.val = val === undefined ? 0 : val; + this.left = left === undefined ? null : left; + this.right = right === undefined ? null : right; + } +} + +// TC: O(m + n), m = number of nodes in root, n = number of nodes in subRoot +// SC: O(m + n) +function isSubtree(root: TreeNode | null, subRoot: TreeNode | null): boolean { + const serializeNode = (node: TreeNode | null) => { + if (!node) return "$"; + + const str = `(${node.val},${serializeNode(node.left)},${serializeNode( + node.right + )})`; + + return str; + }; + + const serializedRoot = serializeNode(root); + const serializedSubRoot = serializeNode(subRoot); + + return serializedRoot.includes(serializedSubRoot); +} From 61995eefc0524069e1b30f3f9049b3b946e8b337 Mon Sep 17 00:00:00 2001 From: Jeehay28 Date: Tue, 8 Jul 2025 12:59:48 +0900 Subject: [PATCH 2/4] Add construct-binary-tree-from-preorder-and-inorder-traversal solution in TS --- .../Jeehay28.ts | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 construct-binary-tree-from-preorder-and-inorder-traversal/Jeehay28.ts diff --git a/construct-binary-tree-from-preorder-and-inorder-traversal/Jeehay28.ts b/construct-binary-tree-from-preorder-and-inorder-traversal/Jeehay28.ts new file mode 100644 index 000000000..d83623fb3 --- /dev/null +++ b/construct-binary-tree-from-preorder-and-inorder-traversal/Jeehay28.ts @@ -0,0 +1,44 @@ +class TreeNode { + val: number; + left: TreeNode | null; + right: TreeNode | null; + constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { + this.val = val === undefined ? 0 : val; + this.left = left === undefined ? null : left; + this.right = right === undefined ? null : right; + } +} + +// TC: O(n) +// SC: O(n) +function buildTree(preorder: number[], inorder: number[]): TreeNode | null { + const indices = {}; + // indices = { + // 9: 0, + // 3: 1, + // 15: 2, + // 20: 3, + // 7: 4 + // } + + for (let i = 0; i < inorder.length; i++) { + const num = inorder[i]; + indices[num] = i; + } + + let preIndex = 0; + + const dfs = (start: number, end: number) => { + if (start > end) return null; + const val = preorder[preIndex]; + preIndex++; + const mid = indices[val]; + + const left = dfs(start, mid - 1); + const right = dfs(mid + 1, end); + + return new TreeNode(val, left, right); + }; + + return dfs(0, inorder.length - 1); +} From d3c1f99dd65445d4669c33b7fe0774f5d0401481 Mon Sep 17 00:00:00 2001 From: Jeehay28 Date: Wed, 9 Jul 2025 10:59:03 +0900 Subject: [PATCH 3/4] Add longest-palindromic-substring solution in TS --- longest-palindromic-substring/Jeehay28.ts | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 longest-palindromic-substring/Jeehay28.ts diff --git a/longest-palindromic-substring/Jeehay28.ts b/longest-palindromic-substring/Jeehay28.ts new file mode 100644 index 000000000..b40bd1971 --- /dev/null +++ b/longest-palindromic-substring/Jeehay28.ts @@ -0,0 +1,26 @@ +// TC: O(n^2) +// SC: O(1) +function longestPalindrome(s: string): string { + if (s.length < 2) return s; + + let maxLeft = 0; + let maxRight = 0; + + const expandWindow = (left: number, right: number): void => { + while (left >= 0 && right < s.length && s[left] === s[right]) { + if (maxRight - maxLeft < right - left) { + maxRight = right; + maxLeft = left; + } + left--; + right++; + } + }; + + for (let i = 0; i < s.length; i++) { + expandWindow(i, i); // odd length palindrome + expandWindow(i, i + 1); // even length palindrome + } + + return s.slice(maxLeft, maxRight + 1); +} From 3fcbbe14e30a7e88726211d3419227e318f25413 Mon Sep 17 00:00:00 2001 From: Jeehay28 Date: Thu, 10 Jul 2025 11:11:47 +0900 Subject: [PATCH 4/4] Add rotate-image solution in TS --- rotate-image/Jeehay28.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 rotate-image/Jeehay28.ts diff --git a/rotate-image/Jeehay28.ts b/rotate-image/Jeehay28.ts new file mode 100644 index 000000000..050e23533 --- /dev/null +++ b/rotate-image/Jeehay28.ts @@ -0,0 +1,26 @@ +/** + Do not return anything, modify matrix in-place instead. + */ + +// TC: O(n^2) +// SC: O(1) +function rotate(matrix: number[][]): void { + let top = 0; + let bottom = matrix.length - 1; + + while (top < bottom) { + let left = top; + let right = bottom; + + for (let i = 0; i < bottom - top; i++) { + const temp = matrix[top][left + i]; // topLeft + matrix[top][left + i] = matrix[bottom - i][left]; + matrix[bottom - i][left] = matrix[bottom][right - i]; + matrix[bottom][right - i] = matrix[top + i][right]; + matrix[top + i][right] = temp; + } + + top++; // top down + bottom--; // bottom up + } +}