From e3d4ee398bb4acaa0da22b3dbc9c41152b2400f6 Mon Sep 17 00:00:00 2001 From: 8804 <8804who@naver.com> Date: Wed, 18 Feb 2026 15:16:32 +0900 Subject: [PATCH 1/4] Week 15 --- subtree-of-another-tree/8804who.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 subtree-of-another-tree/8804who.py diff --git a/subtree-of-another-tree/8804who.py b/subtree-of-another-tree/8804who.py new file mode 100644 index 0000000000..b4b365f73d --- /dev/null +++ b/subtree-of-another-tree/8804who.py @@ -0,0 +1,17 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool: + def getTreeNodes(node): + if not node: + return "#" + + return ":"+str(node.val)+":"+getTreeNodes(node.left)+getTreeNodes(node.right) + + + return getTreeNodes(subRoot) in getTreeNodes(root) + From 9d2ff8135d7f87f427586dfd5ec2e80737aca792 Mon Sep 17 00:00:00 2001 From: 8804 <8804who@naver.com> Date: Thu, 19 Feb 2026 21:49:45 +0900 Subject: [PATCH 2/4] Week 15 --- .../8804who.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 construct-binary-tree-from-preorder-and-inorder-traversal/8804who.py diff --git a/construct-binary-tree-from-preorder-and-inorder-traversal/8804who.py b/construct-binary-tree-from-preorder-and-inorder-traversal/8804who.py new file mode 100644 index 0000000000..b30535b359 --- /dev/null +++ b/construct-binary-tree-from-preorder-and-inorder-traversal/8804who.py @@ -0,0 +1,22 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]: + inorder_idx = {val:idx for idx, val in enumerate(inorder) } + preorder_iter = iter(preorder) + + def dfs(start, end): + if start > end: + return None + + val = next(preorder_iter) + mid = inorder_idx[val] + + return TreeNode(val, dfs(start, mid-1), dfs(mid+1, end)) + + return dfs(0, len(preorder)-1) + From 0d2d7327aa733e28e57845e14188714eab44c580 Mon Sep 17 00:00:00 2001 From: 8804 <8804who@naver.com> Date: Sat, 21 Feb 2026 00:43:19 +0900 Subject: [PATCH 3/4] Week 15 --- rotate-image/8804who.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 rotate-image/8804who.py diff --git a/rotate-image/8804who.py b/rotate-image/8804who.py new file mode 100644 index 0000000000..438e4d6244 --- /dev/null +++ b/rotate-image/8804who.py @@ -0,0 +1,37 @@ +from collections import deque + +class Solution: + def rotate(self, matrix: List[List[int]]) -> None: + """ + Do not return anything, modify matrix in-place instead. + """ + + def sub(s, e): + q = deque() + + for i in range(s, e+1): + q.append(matrix[s][i]) + for i in range(s+1, e+1): + q.append(matrix[i][e]) + for i in range(e-1, s-1, -1): + q.append(matrix[e][i]) + for i in range(e-1, s, -1): + q.append(matrix[i][s]) + + for _ in range(e-s): + q.appendleft(q.pop()) + + for i in range(s, e+1): + matrix[s][i] = q.popleft() + for i in range(s+1, e+1): + matrix[i][e] = q.popleft() + for i in range(e-1, s-1, -1): + matrix[e][i] = q.popleft() + for i in range(e-1, s, -1): + matrix[i][s] = q.popleft() + + if s+1 <= e-1: + sub(s+1, e-1) + + sub(0, len(matrix)-1) + From 3f74675ff161f68dd73941cec04f3dc54c4622eb Mon Sep 17 00:00:00 2001 From: 8804 <8804who@naver.com> Date: Sat, 21 Feb 2026 00:43:35 +0900 Subject: [PATCH 4/4] Week 15 --- longest-palindromic-substring/8804who.py | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 longest-palindromic-substring/8804who.py diff --git a/longest-palindromic-substring/8804who.py b/longest-palindromic-substring/8804who.py new file mode 100644 index 0000000000..5502fd8cb8 --- /dev/null +++ b/longest-palindromic-substring/8804who.py @@ -0,0 +1,28 @@ +class Solution: + def longestPalindrome(self, s: str) -> str: + answer = "" + for i in range(len(s)): + dist = 0 + temp = "" + while i-dist >= 0 and i+dist < len(s): + if s[i-dist] == s[i+dist]: + temp = s[i-dist:i+dist+1] + dist+=1 + else: + break + if len(temp) > len(answer): + answer = temp + if i+1 < len(s): + if s[i] != s[i+1]: + continue + dist = 0 + while i-dist >= 0 and i+1+dist < len(s): + if s[i-dist] == s[i+1+dist]: + temp = s[i-dist:i+dist+2] + dist+=1 + else: + break + if len(temp) > len(answer): + answer = temp + return answer +