- μ£Όμ΄μ§ λ¬Έμμ΄ λ°°μ΄
strs
μ λν΄μ μλ‘ anagramμΈ κ΄κ³μΈ λ¬Έμμ΄λΌλ¦¬ λ¬Άμ΄μ setμ λ§λ€κ³ κ·Έ setμ λͺ©λ‘μ λλ €μ£Όλ λ¬Έμ .
- λ λ¬Έμμ΄μ΄ anagramμ΄λΌλ κ²μ κ° μνλ²³μ μΆν λΉλκ° λμΌνλ€λ λ»μ΄λ€.
- λ°λΌμ κ° κΈμκ° λμΌν λΉλλ‘ μΆνν λ¬Έμμ΄λΌλ¦¬ λ¬ΆμΌλ©΄ λλ λ¬Έμ μ΄λ€.
- λ€λ§ λμΌν μΆν λΉλμμ λΉκ΅νκΈ° μν΄μ uniqueν keyλ₯Ό λ§λ€μ΄μΌ νλλ° μ΄ λ λ ν¨μ¨μ μΈ λ°©λ²μ μ°Ύλ κ²μ΄ νμνλ€.
- λ¨μν integerλ₯Ό λ¬Έμμ΄λ‘ λ°κΏμ ꡬλΆμλ‘ joinνλ λ°©λ²λ μκ² μ§λ§ μλ νμ΄μμλ byte arrayλ₯Ό νμ©νμ¬ keyλ₯Ό λ§λ€μλ€.
- μ΄λ κ° λ¬Έμμ΄μ κΈΈμ΄κ° 100μ΄νμΈ μ μ μ΄μ©ν κ²μ΄λ€ (μ΅λ μΆν λΉλκ° 100μ΄λ―λ‘ byte λ²μλ΄μ λ€μ΄μ€κ² λλ€).
class Solution {
String toHashKey(String s) {
byte[] counter = new byte['z' - 'a' + 1];
for (int i = 0; i < s.length(); ++i) {
++counter[s.charAt(i) - 'a'];
}
try {
return new String(counter, "UTF-8");
} catch (Exception e) {
return "";
}
}
public List<List<String>> groupAnagrams(String[] strs) {
int n = strs.length;
Map<String, List<String>> map = new HashMap<>();
for (int i = 0; i < n; ++i) {
String key = toHashKey(strs[i]);
List<String> set = map.computeIfAbsent(
key, (_) -> new ArrayList<String>());
set.add(strs[i]);
}
return new ArrayList<>(map.values());
}
}