Skip to content

Commit 793112f

Browse files
authored
Merge pull request #1383 from i-mprovising/main
[i-mprovising] Week 05 solution
2 parents 4b446aa + c8051cb commit 793112f

File tree

4 files changed

+101
-0
lines changed

4 files changed

+101
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"""
2+
Time complexity O(n)
3+
Space complexity O(1)
4+
5+
Dynamic programming
6+
"""
7+
8+
class Solution:
9+
def maxProfit(self, prices: List[int]) -> int:
10+
max_profit = 0
11+
min_price = prices[0]
12+
for p in prices:
13+
max_profit = max(max_profit, p - min_price)
14+
min_price = min(min_price, p)
15+
16+
return max_profit

group-anagrams/i-mprovising.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
"""
2+
Time complexity O(n)
3+
--> O(n * wlog(w))
4+
n : 주어지는 단어 개수
5+
w : 평균 단어 길이
6+
7+
Space compexity O(n)
8+
9+
hash table, sorting
10+
"""
11+
12+
class Solution:
13+
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
14+
group = defaultdict(list)
15+
for s in strs:
16+
sorted_str = str(sorted(s))
17+
group[sorted_str].append(s)
18+
19+
return list(group.values())
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
"""
2+
Time complexity O(n)
3+
"""
4+
5+
class Node:
6+
def __init__(self, end=False):
7+
self.children = {} # hash table
8+
self.end = end
9+
10+
class Trie:
11+
def __init__(self):
12+
self.root = Node(end=True)
13+
14+
def insert(self, word: str) -> None:
15+
node = self.root
16+
17+
for c in word:
18+
if c not in node.children:
19+
node.children[c] = Node()
20+
node = node.children[c]
21+
node.end = True
22+
23+
def search(self, word: str) -> bool:
24+
node = self.root
25+
for c in word:
26+
if c not in node.children:
27+
return False
28+
node = node.children[c]
29+
if node.end:
30+
return True
31+
return False
32+
33+
def startsWith(self, prefix: str) -> bool:
34+
node = self.root
35+
for c in prefix:
36+
if c not in node.children:
37+
return False
38+
node = node.children[c]
39+
return True

word-break/i-mprovising.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""
2+
Time complexity O(n*m) n: len(s), m:len(wordDict)
3+
Space compexity O(n)
4+
5+
dynamic programming
6+
"""
7+
8+
class Solution:
9+
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
10+
dp = [False for _ in range(len(s))]
11+
for i in range(len(s)):
12+
flag = False
13+
for word in wordDict:
14+
n = len(word)
15+
if i - n + 1 < 0:
16+
continue
17+
if s[i-n+1:i+1] != word:
18+
continue
19+
if i - n + 1 == 0:
20+
flag = True
21+
break
22+
elif i - n + 1 > 0:
23+
if dp[i - n]:
24+
flag = True
25+
break
26+
dp[i] = flag
27+
return dp[-1]

0 commit comments

Comments
 (0)