Anagram
"listen" ↔ "silent" — aynı harfler, farklı sıra.
Yaklaşım 1: Sırala, karşılaştır — O(n log n)
const sirala = (s) => s.toLowerCase().split("").sort().join("");
return sirala(a) === sirala(b);
Yaklaşım 2: Frekans sayacı — O(n)
const sayac = new Map<string, number>();
for (const h of a) sayac.set(h, (sayac.get(h) ?? 0) + 1);
for (const h of b) {
const kalan = (sayac.get(h) ?? 0) - 1;
if (kalan < 0) return false;
sayac.set(h, kalan);
}
return true;
İkincisi büyük girdilerde çok daha hızlıdır.
Görev
~~anagramMi(a, b)~~: büyük/küçük harf duyarlı değil, boşlukları yok sayar. ~~gruplaAnagram(kelimeler)~~: anagram olanları alt dizilere gruplar.