Given an array of strings strs, group the anagrams together. You can return the answer in any order.
문자열 strs 배열이 주어지면, 애너그램을 그룹화합니다. 어떤 순서로든 답을 반환할 수 있습니다.
Example 1:
Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
Explanation:
- There is no string in strs that can be rearranged to form "bat".
- The strings "nat" and "tan" are anagrams as they can be rearranged to form each other.
- The strings "ate", "eat", and "tea" are anagrams as they can be rearranged to form each other.
Example 2:
Input: strs = [""]
Output: [[""]]
Example 3:
Input: strs = ["a"]
Output: [["a"]]
코드 1
- 문자열을 정렬된 리스트로 전환한 후 그룹화하기
class Solution {
fun groupAnagrams(strs: Array<String>): List<List<String>> {
return strs.groupBy { it.toList().sorted() }
.values
.toList()
}
}
코드 2
- groupingBy 와 eachCount 함수를 이용해서 문자열의 요소 수를 키로 매핑하기
class Solution {
fun groupAnagrams(strs: Array<String>): List<List<String>> {
return strs.groupBy { str -> str.groupingBy { it }.eachCount() }
.values
.toList()
}
코드 3
- 문자열의 요소 수를 확인하기 위해 아스키코드 값을 활용한다.
- 문자열의 전체 요소 수를 담은 배열을 문자열로 변환하고, 해당 문자열을 기준으로 아나그램을 그룹화한다.
class Solution {
fun groupAnagrams3(strs: Array<String>): List<List<String>> {
val answer = HashMap<String, MutableList<String>>()
for (s in strs) {
val count = IntArray(26)
for (c in s) {
count[c - 'a'] += 1
}
val key = count.joinToString()
if (key !in answer) {
answer[key] = mutableListOf<String>()
}
answer[key]!!.add(s)
}
return answer.values.toList()
}
}
'LeetCode > Array & Hashing' 카테고리의 다른 글
[LeetCode][Kotlin] 118. Pascal's Triangle (0) | 2024.08.13 |
---|---|
[LeetCode][Kotlin] 242. Valid Anagram (0) | 2024.08.12 |
[LeetCode][Kotlin] 217. Contains Duplicate (0) | 2024.08.12 |