diff --git a/lcci/17.07.Baby Names/README.md b/lcci/17.07.Baby Names/README.md index 1c870de819bdd..32d51e07326bd 100644 --- a/lcci/17.07.Baby Names/README.md +++ b/lcci/17.07.Baby Names/README.md @@ -245,6 +245,60 @@ function trulyMostPopular(names: string[], synonyms: string[]): string[] { } ``` +```swift +class Solution { + private var graph = [String: [String]]() + private var count = [String: Int]() + private var visited = Set() + private var freq: Int = 0 + + func trulyMostPopular(_ names: [String], _ synonyms: [String]) -> [String] { + for pair in synonyms { + let cleanPair = pair.dropFirst().dropLast() + let parts = cleanPair.split(separator: ",").map(String.init) + let a = parts[0], b = parts[1] + graph[a, default: []].append(b) + graph[b, default: []].append(a) + } + + var namesSet = Set() + for name in names { + let index = name.firstIndex(of: "(")! + let realName = String(name[.. String { + var minName = name + visited.insert(name) + freq += count[name, default: 0] + for neighbor in graph[name, default: []] { + if !visited.contains(neighbor) { + let temp = dfs(neighbor) + if temp < minName { + minName = temp + } + } + } + return minName + } +} +``` + diff --git a/lcci/17.07.Baby Names/README_EN.md b/lcci/17.07.Baby Names/README_EN.md index 130db18cc128c..8d2931c970827 100644 --- a/lcci/17.07.Baby Names/README_EN.md +++ b/lcci/17.07.Baby Names/README_EN.md @@ -245,6 +245,60 @@ function trulyMostPopular(names: string[], synonyms: string[]): string[] { } ``` +```swift +class Solution { + private var graph = [String: [String]]() + private var count = [String: Int]() + private var visited = Set() + private var freq: Int = 0 + + func trulyMostPopular(_ names: [String], _ synonyms: [String]) -> [String] { + for pair in synonyms { + let cleanPair = pair.dropFirst().dropLast() + let parts = cleanPair.split(separator: ",").map(String.init) + let a = parts[0], b = parts[1] + graph[a, default: []].append(b) + graph[b, default: []].append(a) + } + + var namesSet = Set() + for name in names { + let index = name.firstIndex(of: "(")! + let realName = String(name[.. String { + var minName = name + visited.insert(name) + freq += count[name, default: 0] + for neighbor in graph[name, default: []] { + if !visited.contains(neighbor) { + let temp = dfs(neighbor) + if temp < minName { + minName = temp + } + } + } + return minName + } +} +``` + diff --git a/lcci/17.07.Baby Names/Solution.swift b/lcci/17.07.Baby Names/Solution.swift new file mode 100644 index 0000000000000..d74db39df4acc --- /dev/null +++ b/lcci/17.07.Baby Names/Solution.swift @@ -0,0 +1,51 @@ +class Solution { + private var graph = [String: [String]]() + private var count = [String: Int]() + private var visited = Set() + private var freq: Int = 0 + + func trulyMostPopular(_ names: [String], _ synonyms: [String]) -> [String] { + for pair in synonyms { + let cleanPair = pair.dropFirst().dropLast() + let parts = cleanPair.split(separator: ",").map(String.init) + let a = parts[0], b = parts[1] + graph[a, default: []].append(b) + graph[b, default: []].append(a) + } + + var namesSet = Set() + for name in names { + let index = name.firstIndex(of: "(")! + let realName = String(name[.. String { + var minName = name + visited.insert(name) + freq += count[name, default: 0] + for neighbor in graph[name, default: []] { + if !visited.contains(neighbor) { + let temp = dfs(neighbor) + if temp < minName { + minName = temp + } + } + } + return minName + } +}