Skip to content

Commit 48443af

Browse files
authored
Merge pull request #1863 from delight010/main
[SeongA] WEEK 06 solutions
2 parents 4f67fcf + 7d34787 commit 48443af

File tree

5 files changed

+156
-0
lines changed

5 files changed

+156
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
func maxArea(_ height: [Int]) -> Int {
3+
var maxArea = 0
4+
var startPointIndex = 0
5+
var endPointIndex = height.count - 1
6+
while startPointIndex < endPointIndex {
7+
let minHeight = min(height[startPointIndex], height[endPointIndex])
8+
let area = minHeight * (endPointIndex - startPointIndex)
9+
maxArea = max(maxArea, area)
10+
if height[startPointIndex] < height[endPointIndex] {
11+
startPointIndex += 1
12+
} else {
13+
endPointIndex -= 1
14+
}
15+
}
16+
return maxArea
17+
}
18+
}
19+
20+
// Time Complexity O(N)
21+
// Space Complexity O(1)
22+
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
class WordDictionary {
2+
3+
class TrieNode {
4+
var children: [Character: TrieNode] = [:]
5+
var isEndOfWord: Bool = false
6+
}
7+
8+
var root: TrieNode
9+
10+
init() {
11+
root = TrieNode()
12+
}
13+
14+
func addWord(_ word: String) {
15+
var currentNode = root
16+
for (index, char) in word.enumerated() {
17+
if currentNode?.children[char] == nil {
18+
currentNode?.children[char] = TrieNode()
19+
}
20+
currentNode = currentNode?.children[char]
21+
}
22+
currentNode?.isEndOfWord = true
23+
}
24+
25+
func search(_ word: String) -> Bool {
26+
return dfs(root, word: word, index: 0)
27+
}
28+
29+
func dfs(_ node: TrieNode?, word: String, index: Int) -> Bool {
30+
guard let currentNode = node else {
31+
return false
32+
}
33+
if index == word.count {
34+
return currentNode.isEndOfWord
35+
}
36+
37+
let char = Array(word)[index]
38+
if char == "." {
39+
for child in currentNode.children.values {
40+
let result = dfs(child, word: word, index: index + 1)
41+
if result {
42+
return true
43+
}
44+
}
45+
} else {
46+
if let child = currentNode.children[char] {
47+
return dfs(child, word: word, index: index + 1)
48+
} else {
49+
return false
50+
}
51+
}
52+
53+
return false
54+
}
55+
}
56+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
func lengthOfLIS(_ nums: [Int]) -> Int {
3+
var tails: [Int] = []
4+
for num in nums {
5+
if let lastValue = tails.last {
6+
if num > lastValue {
7+
tails.append(num)
8+
} else {
9+
if let index = tails.firstIndex(where: { $0 >= num }) {
10+
tails[index] = num
11+
}
12+
}
13+
} else {
14+
tails.append(num)
15+
}
16+
}
17+
18+
return tails.count
19+
}
20+
}
21+

spiral-matrix/delight010.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
func spiralOrder(_ matrix: [[Int]]) -> [Int] {
3+
var answer: [Int] = []
4+
var top = 0
5+
var bottom = matrix.endIndex - 1
6+
var left = 0
7+
var right = matrix[0].endIndex - 1
8+
while top <= bottom && left <= right {
9+
for column in left...right {
10+
answer.append(matrix[top][column])
11+
}
12+
top += 1
13+
14+
if top <= bottom {
15+
for row in top...bottom {
16+
answer.append(matrix[row][right])
17+
}
18+
}
19+
right -= 1
20+
21+
if top <= bottom {
22+
for column in stride(from: right, through: left, by: -1) {
23+
answer.append(matrix[bottom][column])
24+
}
25+
}
26+
bottom -= 1
27+
28+
if left <= right {
29+
for row in stride(from: bottom, through: top, by: -1) {
30+
answer.append(matrix[row][left])
31+
}
32+
}
33+
left += 1
34+
}
35+
return answer
36+
}
37+
}
38+

valid-parentheses/delight010.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
func isValid(_ s: String) -> Bool {
3+
let dictionary: [Character: Character] = [")":"(", "]":"[", "}":"{"]
4+
var stack: [Character] = []
5+
for char in s {
6+
if let openBucket = dictionary[char] {
7+
if stack.isEmpty == false, stack.removeLast() == openBucket {
8+
continue
9+
} else {
10+
return false
11+
}
12+
}
13+
stack.append(char)
14+
}
15+
16+
return stack.isEmpty
17+
}
18+
}
19+

0 commit comments

Comments
 (0)