Group Anagrams: bir string listesindeki anagramları gruplayın.

Cevap

Anagramlar aynı harfleri aynı sayıda içerir. Her kelime için kanonik bir anahtar üretip hash map'te gruplarız. İki anahtar seçeneği vardır: sıralanmış harfler veya 26 elemanlı harf sayacı.

from collections import defaultdict

def group_anagrams(words):
    groups = defaultdict(list)
    for w in words:
        groups["".join(sorted(w))].append(w)
    return list(groups.values())

print(group_anagrams(["eat", "tea", "tan", "ate", "nat", "bat"]))
# [['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']]

Sayaç anahtarı (daha hızlı)

def group_anagrams_count(words):
    groups = defaultdict(list)
    for w in words:
        count = [0] * 26
        for ch in w:
            count[ord(ch) - ord("a")] += 1
        groups[tuple(count)].append(w)   # liste hash'lenemez, tuple kullan
    return list(groups.values())

Karmaşıklık (n kelime, en uzun kelime k harf)

AnahtarZamanBellek
Sıralı stringO(n x k log k)O(n x k)
Harf sayacıO(n x k)O(n x k)

Tartışılacak noktalar

  • Girdi yalnızca küçük İngilizce harf mi? Unicode veya büyük/küçük harf karışıksa sayaç yerine Counter veya sıralama tercih edilir.
  • Python'da listeler değiştirilebilir (mutable) olduğu için dict anahtarı olamaz; tuple'a çevirmek gerekir. Bu, hash'lenebilirlik konusunu bildiğinizi gösterir.

İlgili soru: Valid Anagram (iki kelime anagram mı?) bunun basit hâlidir.

  1. Binary search'ün zaman karmaşıklığı nedir ve neden?KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  2. Two Sum: toplamı hedefe eşit olan iki elemanın indekslerini bulun.KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  3. Bir parantez dizisinin geçerli olup olmadığını kontrol edin: "({[]})"KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  4. Tek yönlü bağlı listeyi ters çevirin.OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  5. BFS ve DFS arasındaki fark nedir? Hangisini ne zaman kullanırsınız?OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  6. get ve put işlemleri O(1) olan bir LRU Cache tasarlayın.ZorAlgoritmalar & Veri YapılarıYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle