İçeriğe atla
ΣDSA Patterns
Menü
Dil

Hashing

Rehber 5 / 6 · Yol 5 / 6

Etkileşimli

Zihinsel model

Bu problem için animasyonlu çözüm. Adımları kaydır veya boşlukla duraklat; değişmezi yüksek sesle yeniden anlat.

Adım 1 / 6
a
n
a
g
r
a
m

t = nagaram

Geçerli anagram: aynı harf çoklu kümesi. s'yi say, sonra t'yi harca.

Demo önizleme: Bu çözümler otomatik test paketini geçiyor ama insan tarafından incelenmedi. Trade-off ve yazıları taslak olarak değerlendirin.

Valid Anagram

Problem (yeniden ifade)

t, s’nin anagramıysa true döndür (aynı karakterler, aynı sıklıklar).

Sezgi

Anagramlar aynı karakter çoklu kümesini paylaşır. Frekans haritalarını veya sıralı biçimleri karşılaştır.

Yaklaşımlar

Karakter sayımları

Doğrulanmadı
Zaman O(n)Alan O(1)

Fikir. s’deki harfleri say, t ile azalt; hepsi sıfırsa anagram. Küçük İngilizce harf varsayar.

Yürüyüş. “anagram” / “nagaram” → sayımlar iptal → true.

Trade-off. Sıralama daha basit ama O(n log n). Unicode için hash map gerekir.

Çözüm
export function isAnagram(s: string, t: string): boolean {
  if (s.length !== t.length) return false;
  const cnt = new Array<number>(26).fill(0);
  for (let i = 0; i < s.length; i++) {
    cnt[s.charCodeAt(i)! - 97]!++;
    cnt[t.charCodeAt(i)! - 97]!--;
  }
  return cnt.every((c) => c === 0);
}
export function isAnagram(s: string, t: string): boolean {
  if (s.length !== t.length) return false;
  const cnt = new Array<number>(26).fill(0);
  for (let i = 0; i < s.length; i++) {
    cnt[s.charCodeAt(i)! - 97]!++;
    cnt[t.charCodeAt(i)! - 97]!--;
  }
  return cnt.every((c) => c === 0);
}

Şablon bağlantısı

Hashing şablonunun frekans imzası / sayım dizisi (group anagrams ile aynı anahtar fikri).

Yansıma