Skip to content

Commit 010dc6d

Browse files
authored
Merge pull request DaleStudy#610 from gitsunmin/main
[gitsunmin] Week15 Solutions
2 parents 1b1b756 + 9ee119f commit 010dc6d

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* https://leetcode.com/problems/longest-palindromic-substring/
3+
* time complexity : O(n)
4+
* space complexity : O(n^2)
5+
*/
6+
7+
function findPalindromeAroundCenter(s: string, leftIndex: number, rightIndex: number): [number, number] {
8+
while (leftIndex >= 0 && rightIndex < s.length && s[leftIndex] === s[rightIndex]) {
9+
leftIndex--; // 왼쪽으로 확장
10+
rightIndex++; // 오른쪽으로 확장
11+
}
12+
13+
// 팰린드롬의 시작과 끝 인덱스 반환
14+
return [leftIndex + 1, rightIndex - 1];
15+
}
16+
17+
function longestPalindrome(s: string): string {
18+
if (s.length <= 1) return s;
19+
20+
let longestPalindromeStartIndex = 0;
21+
let longestPalindromeLength = 0;
22+
23+
for (let centerIndex = 0; centerIndex < s.length; centerIndex++) {
24+
// 홀수 길이 팰린드롬 확인
25+
const [oddStart, oddEnd] = findPalindromeAroundCenter(s, centerIndex, centerIndex);
26+
const oddLength = oddEnd - oddStart + 1;
27+
28+
if (oddLength > longestPalindromeLength) {
29+
longestPalindromeStartIndex = oddStart;
30+
longestPalindromeLength = oddLength;
31+
}
32+
33+
// 짝수 길이 팰린드롬 확인
34+
const [evenStart, evenEnd] = findPalindromeAroundCenter(s, centerIndex, centerIndex + 1);
35+
const evenLength = evenEnd - evenStart + 1;
36+
37+
if (evenLength > longestPalindromeLength) {
38+
longestPalindromeStartIndex = evenStart;
39+
longestPalindromeLength = evenLength;
40+
}
41+
}
42+
43+
// 가장 긴 팰린드롬 부분 문자열 반환
44+
return s.substring(longestPalindromeStartIndex, longestPalindromeStartIndex + longestPalindromeLength);
45+
}

subtree-of-another-tree/gitsunmin.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* https://leetcode.com/problems/subtree-of-another-tree/
3+
* time complexity : O(n * m)
4+
* space complexity : O(n)
5+
*/
6+
7+
class TreeNode {
8+
val: number;
9+
left: TreeNode | null;
10+
right: TreeNode | null;
11+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
12+
this.val = val ?? 0;
13+
this.left = left ?? null;
14+
this.right = right ?? null;
15+
}
16+
}
17+
18+
function isSameTree(p: TreeNode | null, q: TreeNode | null): boolean {
19+
if (!p && !q) return true;
20+
if (!p || !q || p.val !== q.val) return false;
21+
22+
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
23+
}
24+
25+
function isSubtree(root: TreeNode | null, subRoot: TreeNode | null): boolean {
26+
if (!root) return false;
27+
if (isSameTree(root, subRoot)) return true;
28+
return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot);
29+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* https://leetcode.com/problems/validate-binary-search-tree/
3+
* time complexity : O(n)
4+
* space complexity : O(n)
5+
*/
6+
7+
class TreeNode {
8+
val: number;
9+
left: TreeNode | null;
10+
right: TreeNode | null;
11+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
12+
this.val = val ?? 0;
13+
this.left = left ?? null;
14+
this.right = right ?? null;
15+
}
16+
}
17+
18+
function validate(node: TreeNode | null, lower: number, upper: number): boolean {
19+
if (!node) return true;
20+
const val = node.val;
21+
22+
if (val <= lower || val >= upper) return false;
23+
if (!validate(node.right, val, upper)) return false;
24+
if (!validate(node.left, lower, val)) return false;
25+
26+
return true;
27+
}
28+
29+
function isValidBST(root: TreeNode | null): boolean {
30+
31+
return validate(root, -Infinity, Infinity);
32+
}

0 commit comments

Comments
 (0)