Count a Character
Kamu mendapatkan string s dan satu huruf c. Kembalikan jumlah kemunculan c di dalam s. Pencocokan membedakan huruf besar dan kecil: B dan b adalah karakter yang berbeda.
Fungsi
- sstring
- string huruf bahasa Inggris yang dicari
- cstring
- satu huruf untuk dihitung
- Mengembalikaninteger
- berapa banyak karakter dalam s yang sama dengan c
Batasan
1 ≤ s.length ≤ 5 × 104shanya berisi huruf Inggris (asampaiz,AsampaiZ).cadalah tepat satu huruf dalam bahasa Inggris.
Contoh
- Input
- s = "Mississippi"c = "s"
- Output
- 4
- Penjelasan
Mississippimemilikispada indeks 2, 3, 5, dan 6, jadi jawabannya adalah 4.
- Input
- s = "Banana"c = "b"
- Output
- 0
- Penjelasan
Bananadiawali dengan huruf kapitalB, sedangkan kamu mencari huruf kecilb. Tidak ada yang cocok, jadi jawabannya adalah 0.
Pertanyaan lanjutan
Bagaimana jika c bisa berupa kata yang terdiri dari beberapa huruf, seperti ss? Apakah kecocokan yang tumpang tindih ikut dihitung, dan bagaimana perulanganmu berubah?
Petunjuk
Buka satu per satu. Setiap petunjuk mengungkap sedikit lebih banyak.
Untuk mengetahui berapa kali
cmuncul, karakter mana darisyang perlu kamu periksa?Bandingkan setiap karakter dalam
sdengancpersis seperti adanya. Huruf besar dan huruf kecil adalah karakter yang berbeda di sini.Simpan penghitung yang dimulai dari 0. Telusuri string satu kali dan tambahkan 1 setiap kali karakter saat ini sama dengan
c.
Solusi
Setiap karakter dari s bisa berupa c, jadi periksa setiap karakter satu kali dan hitung kecocokannya. Perhatikan huruf besar-kecil: huruf kapital adalah karakter yang berbeda.
Hapus setiap c dan bandingkan panjangnya
Intuisi
Buat salinan s dengan menghapus setiap c. Setiap penghapusan membuat salinan lebih pendek satu karakter, jadi selisih panjangnya adalah jumlah karakter yang dihapus. Untuk Mississippi, salinannya adalah Miiippi: 11 dikurangi 7 sama dengan 4.
Waktunya O(n), tetapi salinan tersebut membutuhkan memori ekstra O(n) yang tidak diperlukan oleh penghitung.
Algoritma
- Buat salinan
syang tidak menyertakan setiap karakter yang sama denganc. - Ukur panjang
sdan panjang salinannya. - Kembalikan panjang
sdikurangi panjang salinannya.
def countChar(s, c):
# Every c that disappears makes the string one character shorter.
without = s.replace(c, "")
return len(s) - len(without)Satu iterasi dengan penghitung
Intuisi
Hitung saat kamu membaca, bukan dengan membuat salinan. Penghitung dimulai dari 0 dan bertambah 1 untuk setiap karakter yang sama dengan c. Kesamaan biasa mencegah huruf kapital cocok dengan huruf kecil.
Setiap karakter dibandingkan satu kali dan hanya penghitung yang disimpan: waktu O(n), ruang O(1). Tidak ada solusi yang lebih baik dari waktu O(n), karena karakter yang kamu lewati bisa jadi satu lagi c.
Algoritma
- Baca huruf target dari
cdan tetapkancount = 0. - Telusuri
ssatu karakter setiap kali. - Jika karakter tersebut sama dengan target, tambahkan 1 ke
count. - Kembalikan
count.
def countChar(s, c):
count = 0
for ch in s:
if ch == c:
count += 1
return count
Jebakan dan kasus tepi
- Mengabaikan kapitalisasi. Mengubah kedua sisi menjadi huruf kecil membuat
Bananadenganbmenghasilkan 1, padahal jawabannya 0. - Membandingkan karakter dengan string. Di Java, C, C++, C# dan Go,
cberupa string, sedangkans[i]ataus.charAt(i)adalah satu karakter. Ambilc[0](atauc.charAt(0)) sekali sebelum perulangan. - Membandingkan string dengan
==di Java.String.valueOf(s.charAt(i)) == cmembandingkan identitas object dan hampir selalu menghasilkan false. Bandingkan nilaichar. - Memanggil
strlen(s)dalam kondisi perulangan di C. Fungsi ini memindai ulang string pada setiap langkah, sehingga5 × 10^4karakter membutuhkan sekitar2.5 × 10^9langkah.
Pertanyaan yang sering diajukan3
Bagaimana cara menghitung kemunculan sebuah karakter dalam string?
Telusuri string satu kali dengan penghitung yang dimulai dari 0, lalu tambahkan 1 setiap kali karakter saat ini sama dengan karakter yang kamu cari. Proses ini membutuhkan waktu O(n) dan memori tambahan O(1). Untuk menghitung tanpa membedakan huruf besar dan kecil, ubah string dan huruf menjadi huruf kecil terlebih dahulu.
Bisakah saya menggunakan fungsi count bawaan saat wawancara?
Biasanya ya, selama kamu bisa menjelaskan biaya komputasinya. str.count dan fungsi serupa di Python tetap membaca seluruh string, jadi kompleksitasnya O(n). Bersiaplah menulis perulangan jika pewawancara meminta.
Bagaimana cara menghitung semua karakter sekaligus?
Lakukan satu kali pemindaian dan catat jumlah kemunculan setiap karakter, dalam hash map atau array berisi 52 penghitung untuk huruf-huruf bahasa Inggris. Setelah pemindaian itu, jumlah kemunculan huruf apa pun dapat diketahui dengan satu kali pencarian. Gunakan cara ini saat kamu ditanya tentang banyak huruf dalam string yang sama.
Soal serupa
Soal yang memakai ide yang sama. Mengerjakan dua atau tiga di antaranya membuat polanya melekat.
def countChar(s, c):
# Tulis kodemu di siniTes #1
Tes #2
Argumen
s = "Mississippi" c = "s"
Output yang diharapkan
4