문제 출처: https://leetcode.com/problems/group-anagrams/submissions/
테스트는 통과하나 타임 리밋 초과가 발생합니다. 더 나은 방법을 찾아야 합니다.
func groupAnagrams(_ strs: [String]) -> [[String]] {
var set = Set<String>()
for i in strs {
set.insert(String(i.sorted()))
}
var dimensionArray = [[String]]()
for i in set {
dimensionArray.append([i])
}
for i in 0..<dimensionArray.count {
var filter = [String]()
filter = strs.filter { [String($0.sorted())] == dimensionArray[i] }
dimensionArray[i].append(contentsOf: filter)
dimensionArray[i].removeFirst()
}
return dimensionArray
}
다른 풀이이지만 기본 아이디어는 같고, 역시 타임 리밋 초과입니다.
func groupAnagrams(_ strs: [String]) -> [[String]] {
var result = Set<[String]>()
for i in strs {
var sorted = String(i.sorted())
var filter = [String]()
filter = strs.filter { String($0.sorted()) == sorted }
result.insert(filter)
}
var results = [[String]]()
for i in result {
results.append(i)
}
return results
}
딕셔너리를 사용한 풀이이지만, 여전히 타임 리밋 초과입니다.
func groupAnagrams(_ strs: [String]) -> [[String]] {
var dict = [String:[String]]()
for i in strs {
let sorted = String(i.sorted())
var filter = [String]()
filter = strs.filter { String($0.sorted()) == sorted }
dict[sorted] = filter
}
return Array(dict.values)
}