NeetCode 150 / Arrays & Hashing
MediumArrays & HashingO(n·k log k)
ভিডিওতে দেখো — YouTube @algonur_com

কোড

Python
def groupAnagrams(strs: list[str]) -> list[list[str]]:
    from collections import defaultdict
    groups = defaultdict(list)
    for s in strs:
        groups[tuple(sorted(s))].append(s)
    return list(groups.values())
Java
public List<List<String>> groupAnagrams(String[] strs) {
    Map<String, List<String>> map = new HashMap<>();
    for (String s : strs) {
        char[] arr = s.toCharArray();
        Arrays.sort(arr);
        String key = new String(arr);
        map.computeIfAbsent(key, k -> new ArrayList<>()).add(s);
    }
    return new ArrayList<>(map.values());
}
Kotlin
fun groupAnagrams(strs: Array<String>): List<List<String>> =
    strs.groupBy { it.toCharArray().sorted().joinToString("") }.values.toList()
C++
vector<vector<string>> groupAnagrams(vector<string>& strs) {
    unordered_map<string, vector<string>> map;
    for (auto& s : strs) {
        string key = s;
        sort(key.begin(), key.end());
        map[key].push_back(s);
    }
    vector<vector<string>> res;
    for (auto& p : map) res.push_back(p.second);
    return res;
}
C
// C: sort each string as key, use string comparison grouping
int cmp(const void* a, const void* b) { return *(char*)a - *(char*)b; }
char sortedKey(char* s, char* out, int len) {
    for (int i = 0; i < len; i++) out[i] = s[i];
    out[len] = '\0';
    qsort(out, len, sizeof(char), cmp);
    return 0;
}

জটিলতা

O(n·k log k)
সময় — অ্যারেটা একবারই ঘুরি, ম্যাপে খোঁজা O(1)।
O(n·k)
জায়গা — সবচেয়ে খারাপ ক্ষেত্রে সব সংখ্যা ম্যাপে থাকে।
আগের সমস্যা← Two Sumপরের সমস্যাTop K Frequent Elements →