diff --git a/best-time-to-buy-and-sell-stock/doitduri.swift b/best-time-to-buy-and-sell-stock/doitduri.swift new file mode 100644 index 000000000..69d5c2b7b --- /dev/null +++ b/best-time-to-buy-and-sell-stock/doitduri.swift @@ -0,0 +1,18 @@ +class Solution { + func maxProfit(_ prices: [Int]) -> Int { + guard var anchor = prices.first, prices.count > 1 else { + return 0 + } + + var result = 0 + for price in prices { + if price < anchor { + anchor = price + } else if price - anchor > result { + result = price - anchor + } + } + + return result + } +} diff --git a/group-anagrams/doitduri.swift b/group-anagrams/doitduri.swift new file mode 100644 index 000000000..36dd78e3b --- /dev/null +++ b/group-anagrams/doitduri.swift @@ -0,0 +1,16 @@ +class Solution { + func groupAnagrams(_ strs: [String]) -> [[String]] { + var groups: [String: [String]] = [:] + + for str in strs { + let sortedStr = String(str.sorted()) + + var values = groups[sortedStr] ?? [] + values.append(str) + + groups[sortedStr] = values + } + + return Array(groups.values) + } +} diff --git a/implement-trie-prefix-tree/doitduri.swift b/implement-trie-prefix-tree/doitduri.swift new file mode 100644 index 000000000..688add953 --- /dev/null +++ b/implement-trie-prefix-tree/doitduri.swift @@ -0,0 +1,46 @@ +class TrieNode { + var children: [Character: TrieNode] = [:] + var isEnd: Bool = false +} + +class Trie { + private let root: TrieNode + + init() { + root = TrieNode() + } + + func insert(_ word: String) { + var current = root + for char in word { + if current.children[char] == nil { + current.children[char] = TrieNode() + } + current = current.children[char]! + } + current.isEnd = true + } + + func search(_ word: String) -> Bool { + guard let node = findNode(word) else { + return false + } + return node.isEnd + } + + func startsWith(_ prefix: String) -> Bool { + return findNode(prefix) != nil + } + + private func findNode(_ prefix: String) -> TrieNode? { + var current = root + for char in prefix { + guard let next = current.children[char] else { + return nil + } + current = next + } + return current + } +} + diff --git a/word-break/doitduri.swift b/word-break/doitduri.swift new file mode 100644 index 000000000..57d9097d9 --- /dev/null +++ b/word-break/doitduri.swift @@ -0,0 +1,26 @@ +class Solution { + func wordBreak(_ s: String, _ wordDict: [String]) -> Bool { + let wordSet = Set(wordDict) + var dp = Array(repeating: false, count: s.count + 1) + + dp[0] = true + + for i in 1...s.count { + for j in 0..