Pelajaran 4.3
Mengecek anagram
7 menit · 8 langkah
Langkah 1 dari 8 · Penjelasan
Dua string adalah anagram kalau setiap huruf muncul sama banyak di keduanya. Urutannya bebas.
Caranya: cek panjangnya dulu. Lalu hitung naik setiap huruf di
a, dan hitung turun setiap huruf dib. Kalau ada huruf dibyang hitungannya sudah 0, berarti bukan anagram.Langkah 2 dari 8 · Tebak hasilnya
Kode yang sama. Apa hasilnya untuk
"aab"dan"abb"?function solution(a, b) { if (a.length !== b.length) { return false } const counts = new Map() for (const ch of a) { counts.set(ch, (counts.get(ch) || 0) + 1) } for (const ch of b) { if (!counts.get(ch)) { return false } counts.set(ch, counts.get(ch) - 1) } return true}falsetrue
Langkah 3 dari 8 · Tebak hasilnya
Versi ini tidak mengecek panjang. Apa hasilnya untuk
"abc"dan"ab"?function solution(a, b) { const counts = new Map() for (const ch of a) { counts.set(ch, (counts.get(ch) || 0) + 1) } for (const ch of b) { if (!counts.get(ch)) { return false } counts.set(ch, counts.get(ch) - 1) } return true}truefalse
Langkah 4 dari 8 · Pilih pendekatan
Cek mana yang membuktikan dua string adalah anagram?
- Panjangnya sama dan setiap huruf punya hitungan yang sama
- Setiap huruf di
aada dib - Panjangnya sama dan kumpulan hurufnya sama
- Huruf pertama dan terakhirnya sama
Langkah 5 dari 8 · Susun kodenya
Susun function yang me-return
truekalauadanbadalah anagram. Hitung naik daria, hitung turun darib, lalu pastikan semua hitungan kembali ke 0. Dua baris tidak termasuk.const counts = new Map()for (const c of counts.values()) {for (const ch of b) counts.set(ch, (counts.get(ch) || 0) + 1)if (a.length !== b.length) return false}if (c !== 0) return falsefor (const ch of b) counts.set(ch, (counts.get(ch) || 0) - 1)return true}function solution(a, b) {for (const ch of a) counts.set(ch, (counts.get(ch) || 0) + 1)if (c === 0) return falseLangkah 6 dari 8 · Cari bug-nya
Cek anagram ini memakai object biasa. Untuk
"ab"dan"ba"kode ini me-returnfalse, padahal harusnyatrue. Ketuk baris yang salah.function solution(a, b) { if (a.length !== b.length) return false const counts = {} for (const ch of a) counts[ch]++ for (const ch of b) counts[ch]-- return Object.values(counts).every((c) => c === 0)}Langkah 7 dari 8 · Tulis kodenya
solution(note, letters)Return
truekalaunotebisa disusun dari huruf-huruf diletters. Setiap huruf dilettershanya boleh dipakai sekali.
Constraint:0 ≤ note.length, letters.length ≤ 10⁵, huruf kecil saja.function solution(note, letters) { // "aab", "baa" -> true // "aa", "ab" -> false }Langkah 8 dari 8 · Ringkasan
- Anagram berarti setiap huruf punya hitungan yang sama, bukan hanya huruf yang sama.
- Cek panjang dulu. Tanpa itu, huruf sisa di string yang lebih panjang lolos.
- Hitung naik dari satu string, hitung turun dari yang lain.