Needle In A Haystack Console: Tutorial JS Langkah demi Langkah - Pertanyaan

Needle In A Haystack Console: Tutorial JS Langkah demi Langkah

Pelajari masalah pencarian string Needle In A Haystack dengan dua solusi, langkah pengujian console, dan contoh JavaScript siap wawancara.

2026-09-29
Tim Wiki Needle In A Haystack
Panduan Cepat
  • Pengujian Needle In A Haystack console memverifikasi solusi pencarian substring Anda dalam hitungan detik
  • Soal ini meminta indeks pertama di mana needle muncul di dalam haystack, atau -1
  • Dua solusi: sliding window manual dengan loop bersarang dan indexOf bawaan
  • Uji dengan dua pasangan contoh: "pineapple pie" / "apple" dan "a coffee bean" / "tea"
  • Output console yang diharapkan: 4 untuk kecocokan, -1 untuk tidak ada kecocokan

Ringkasan Masalah dan Alur Kerja Console

Tantangan Needle In A Haystack adalah latihan wawancara coding klasik: diberikan dua string bernama needle dan haystack, kembalikan indeks di mana needle pertama kali muncul di dalam haystack. Jika tidak muncul, kembalikan -1. Console adalah siklus umpan balik tercepat Anda — tulis fungsinya, log dua panggilan uji, jalankan file di terminal, dan baca hasilnya secara langsung.

Sorotan Video:

  • Pernyataan masalah: kembalikan indeks pertama needle di dalam haystack, atau -1
  • Solusi 1: loop for bersarang yang bergeser karakter demi karakter di sepanjang string
  • Solusi 2: jalan pintas satu baris menggunakan metode bawaan indexOf
  • Pasangan uji: "pineapple pie" dengan "apple" (kecocokan di indeks 4), dan "a coffee bean" dengan "tea" (tidak ada kecocokan, -1)
  • Kasus tepi: needle kosong mengembalikan 0 berdasarkan konvensi

Sebelum menulis logika apa pun, atur variabel uji Anda. Ini menjaga sesi console Anda tetap terorganisir dan dapat direproduksi:

const h1 = "pineapple pie";
const n1 = "apple";
const h2 = "a coffee bean";
const n2 = "tea";
Pasangan UjiHaystackNeedleOutput yang DiharapkanAlasan
1pineapple pieapple4"apple" dimulai di indeks 4
2a coffee beantea-1"tea" tidak pernah muncul
Penamaan Itu Penting

Jaga nama variabel seperti h1, n1, h2, n2 tetap konsisten di setiap eksekusi console. Saat Anda membandingkan output antara solusi manual dan yang dioptimalkan, nama yang cocok membuat ketidaksesuaian terlihat jelas dalam sekali lihat.

Solusi 1: Sliding Window Manual

Pendekatan pertama bergeser di sepanjang string besar dan membandingkan karakter demi karakter. Di setiap posisi awal, periksa karakter berikutnya terhadap needle. Kecocokan penuh pertama memberikan jawabannya; jika pemindaian selesai tanpa kecocokan, kembalikan -1.

function findNeedle(haystack, needle) {
  if (needle.length === 0) return 0;
  for (let i = 0; i <= haystack.length - needle.length; i++) {
    let match = true;
    for (let j = 0; j < needle.length; j++) {
      if (haystack[i + j] !== needle[j]) {
        match = false;
        break;
      }
    }
    if (match) return i;
  }
  return -1;
}

Keputusan struktural utama dalam solusi ini:

KomponenPeranDetail
Pemeriksaan batasKasus tepiNeedle kosong segera mengembalikan 0
Loop luarIndeks awalBerjalan selama i <= haystack.length - needle.length
Flag kecocokanAsumsiDimulai true, berubah ke false saat tidak cocok
Loop dalamPerbandinganMenelusuri karakter needle, break menghentikan lebih awal
Kembalikan -1GagalLoop luar selesai tanpa kecocokan penuh
Batas Loop Sangat Kritis

Kondisi loop luar harus i <= haystack.length - needle.length. Kesalahan off-by-one di sini bisa melewatkan posisi awal yang valid di akhir string atau membaca melewati string dan membuat pengujian console Anda error.

Solusi 2: Dioptimalkan dengan indexOf

Alih-alih menulis loop bersarang secara manual, gunakan pencarian bawaan. Memanggil indexOf pada haystack dengan needle mengembalikan indeks awal pertama jika ada, atau -1 jika tidak ada.

function findNeedleIndex(haystack, needle) {
  if (needle.length === 0) return 0;
  return haystack.indexOf(needle);
}

Manual (findNeedle)

  • Loop for bersarang dengan flag kecocokan
  • Menunjukkan bahwa Anda memahami algoritmanya
  • Jawaban terbaik saat diminta "implementasikan sendiri"
  • Kompleksitas waktu O(n × m)

Dioptimalkan (findNeedleIndex)

  • Return satu baris dengan indexOf
  • Kode lebih bersih, lebih sedikit rawan kesalahan
  • Jawaban terbaik saat kecepatan penyelesaian penting
  • Output identik pada semua pasangan uji
Strategi Wawancara

Dalam wawancara langsung, sajikan solusi manual terlebih dahulu untuk menunjukkan pemikiran algoritmik, lalu tawarkan versi indexOf sebagai pilihan produksi yang lebih bersih. Keduanya mengembalikan hasil yang sama, jadi katakan secara eksplisit — ini menunjukkan bahwa Anda telah memverifikasi kesetaraannya.

Pengujian Console Langkah demi Langkah

Jalankan kedua solusi melalui alur kerja console yang sama agar Anda dapat mengonfirmasi perilaku identik sebelum menyatakan salah satunya selesai.

1

Definisikan variabel uji

Buat h1 = "pineapple pie", n1 = "apple", h2 = "a coffee bean", n2 = "tea" di bagian atas file Anda agar setiap solusi diuji dengan input yang identik.

2

Log solusi manual

Tulis console.log(findNeedle(h1, n1)) dan console.log(findNeedle(h2, n2)) untuk menjalankan jalur loop bersarang.

3

Jalankan file di terminal

Eksekusi file dengan Node dan baca outputnya. Hasil yang diharapkan secara berurutan: 4, lalu -1.

4

Log solusi yang dioptimalkan

Tambahkan console.log(findNeedleIndex(h1, n1)) dan console.log(findNeedleIndex(h2, n2)), lalu jalankan ulang. Output harus cocok: 4 dan -1.

5

Konfirmasi kesetaraan dan rapikan

Jika kedua solusi sepakat di setiap pasangan, implementasi Anda terverifikasi. Hapus log duplikat atau biarkan berlabel untuk referensi di masa mendatang.

Panggilan ConsoleSolusiOutput yang Diharapkan
findNeedle(h1, n1)Manual4
findNeedle(h2, n2)Manual-1
findNeedleIndex(h1, n1)Dioptimalkan4
findNeedleIndex(h2, n2)Dioptimalkan-1
Verifikasi Berhasil

Saat keempat panggilan console mencetak 4, -1, 4, -1 secara berurutan, kedua implementasi dikonfirmasi setara dan benar untuk pasangan uji ini. Itu adalah lampu hijau Anda untuk melanjutkan.

Checklist Latihan dan Kesalahan Umum

Tonggak Penguasaan:

  • Implementasikan solusi sliding-window manual dari ingatan
  • Tangani kasus tepi needle kosong (kembalikan 0)
  • Tulis one-liner indexOf dan jelaskan mengapa ia bekerja
  • Jalankan kedua solusi di console dan konfirmasi output identik
  • Jelaskan perbedaan kompleksitas waktu dengan lantang

Kesalahan umum yang mengganggu eksekusi console:

JebakanGejalaPerbaikan
Batas loop salah (< alih-alih <=)Melewatkan kecocokan di akhir stringGunakan i <= haystack.length - needle.length
Tidak ada break saat tidak cocokLebih lambat, hasil sama tapi borosTambahkan break setelah mengatur match = false
Lupa pemeriksaan needle kosongOutput tak terduga untuk ""Kembalikan 0 saat needle.length === 0
Menukar argumenSelalu -1Jaga urutannya: findNeedle(haystack, needle)
Salah ketik seperti haststackReferenceError di consoleGunakan ejaan yang konsisten: haystack
Kesalahan Ejaan yang Menyebar

Kesalahan console yang sering terjadi dalam latihan ini adalah mengetik haststack di dalam fungsi sementara pemanggilnya mengirimkan haystack. JavaScript memperlakukannya sebagai variabel tidak terdefinisi jika dideklarasikan salah, atau diam-diam membuat bug — periksa ejaan di kedua tempat.

FAQ

Q: Apa yang sebenarnya diverifikasi oleh pengujian console Needle In A Haystack?

Ini memverifikasi bahwa fungsi Anda mengembalikan indeks pertama di mana needle muncul di dalam haystack, atau -1 saat tidak ada kecocokan. Dengan pasangan uji standar, eksekusi yang benar mencetak 4 untuk 'apple' di 'pineapple pie' dan -1 untuk 'tea' di 'a coffee bean'.

Q: Mengapa needle kosong mengembalikan 0?

Berdasarkan konvensi, string kosong dianggap muncul di awal string apa pun, yaitu indeks 0. Baik solusi manual maupun berbasis indexOf memasukkan pemeriksaan ini agar outputnya tetap konsisten.

Q: Solusi mana yang sebaiknya saya berikan dalam wawancara?

Mulailah dengan versi loop bersarang manual untuk menunjukkan bahwa Anda memahami algoritma yang mendasarinya, lalu sajikan versi indexOf sebagai alternatif yang lebih bersih dan siap produksi. Menyebutkan bahwa keduanya menghasilkan output console yang identik akan memperkuat jawaban Anda.

Q: Berapa kompleksitas waktu dari setiap pendekatan?

Solusi sliding-window manual berjalan dalam O(n × m), di mana n adalah panjang haystack dan m adalah panjang needle, karena setiap posisi awal dapat membandingkan hingga m karakter. Versi indexOf mendelegasikan pekerjaan ke pencarian bawaan bahasa.