Skip to content

Commit ce6ec11

Browse files
Merge pull request #1653 from printjin-gmailcom/main
[printjin-gmailcom] WEEK 15 solutions
2 parents 079cc97 + 944bf05 commit ce6ec11

File tree

5 files changed

+77
-0
lines changed

5 files changed

+77
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import collections
2+
class Solution:
3+
def alien_order(self, words):
4+
graph = collections.defaultdict(set)
5+
indegree = {}
6+
for word in words:
7+
for c in word:
8+
indegree[c] = 0
9+
for i in range(len(words) - 1):
10+
w1, w2 = words[i], words[i + 1]
11+
min_len = min(len(w1), len(w2))
12+
if len(w1) > len(w2) and w1[:min_len] == w2[:min_len]:
13+
return ""
14+
for j in range(min_len):
15+
if w1[j] != w2[j]:
16+
if w2[j] not in graph[w1[j]]:
17+
graph[w1[j]].add(w2[j])
18+
indegree[w2[j]] += 1
19+
break
20+
queue = collections.deque([c for c in indegree if indegree[c] == 0])
21+
res = []
22+
while queue:
23+
c = queue.popleft()
24+
res.append(c)
25+
for nei in graph[c]:
26+
indegree[nei] -= 1
27+
if indegree[nei] == 0:
28+
queue.append(nei)
29+
return "".join(res) if len(res) == len(indegree) else ""
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def buildTree(self, preorder, inorder):
3+
inorder_index_map = {val: idx for idx, val in enumerate(inorder)}
4+
def build(pre_left, pre_right, in_left, in_right):
5+
if pre_left > pre_right:
6+
return None
7+
root_val = preorder[pre_left]
8+
root = TreeNode(root_val)
9+
in_root_idx = inorder_index_map[root_val]
10+
left_size = in_root_idx - in_left
11+
root.left = build(pre_left + 1, pre_left + left_size, in_left, in_root_idx - 1)
12+
root.right = build(pre_left + left_size + 1, pre_right, in_root_idx + 1, in_right)
13+
return root
14+
return build(0, len(preorder) - 1, 0, len(inorder) - 1)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def longestPalindrome(self, s):
3+
def expand(left, right):
4+
while left >= 0 and right < len(s) and s[left] == s[right]:
5+
left -= 1
6+
right += 1
7+
return s[left + 1:right]
8+
res = ""
9+
for i in range(len(s)):
10+
odd = expand(i, i)
11+
even = expand(i, i + 1)
12+
res = max(res, odd, even, key=len)
13+
return res

rotate-image/printjin-gmailcom.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution:
2+
def rotate(self, matrix):
3+
n = len(matrix)
4+
for i in range(n):
5+
for j in range(i + 1, n):
6+
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
7+
for row in matrix:
8+
row.reverse()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def isSubtree(self, root, subRoot):
3+
if not root:
4+
return False
5+
if self.isSameTree(root, subRoot):
6+
return True
7+
return self.isSubtree(root.left, subRoot) or self.isSubtree(root.right, subRoot)
8+
def isSameTree(self, s, t):
9+
if not s and not t:
10+
return True
11+
if not s or not t or s.val != t.val:
12+
return False
13+
return self.isSameTree(s.left, t.left) and self.isSameTree(s.right, t.right)

0 commit comments

Comments
 (0)