Count Vowels
İngilizce harflerden oluşan bir s dizgesi verildiğinde, karakterlerinden kaçının sesli harf olduğunu döndür. Sesli harfler, küçük veya büyük harfle yazılmış a, e, i, o ve u harfleridir. y harfi sayılmaz.
Fonksiyon
- sstring
- Taranacak İngilizce harf dizisi
- Döndürürinteger
- s içindeki sesli harflerin sayısı; büyük ve küçük harfler birlikte
Kısıtlar
1 ≤ s.length ≤ 5 × 104syalnızca İngilizce harfler içerir (a'danz'ye,A'danZ'ye).
Örnekler
- Girdi
- s = "Interview"
- Çıktı
- 4
- Açıklama
- Ünlüler
I,e,iveeharfleridir. BüyükIküçük harf gibi sayılır, dolayısıyla cevap 4'tür.
- Girdi
- s = "rhythm"
- Çıktı
- 0
- Açıklama
rhythmsözcüğündea,e,i,oveyauyok veylistede yer almıyor, bu yüzden cevap 0.
Ek soru
Beş ünlünün her birinin kaç kez geçtiğini, dizeyi yalnızca bir kez okuyarak yine de döndürebilir misin?
İpuçları
Tek tek açın. Her biri biraz daha fazlasını gösterir.
Karakterlere teker teker bak. Bir karakteri sesli harf yapan nedir ve büyük harf kullanılması yanıtı değiştirir mi?
Test etmeden önce her karakteri küçük harfe dönüştür. Ardından on harf yerine beş harfle karşılaştır.
0'dan başlayan bir sayaç tut. Her karakter için, karakteri küçük harfe dönüştür ve
a,e,i,oveyauise sayaca 1 ekle.
Çözüm
Dizgeyi bir sayaçla bir kez oku. Her karakteri küçük harfe dönüştür; böylece beş sesli harfe karşı yapılan tek bir kontrol her iki durumu da kapsar.
Her sesli harfi kendi geçişinde say
Sezgi
aeiouAEIOU içindeki on harfin her birini dizgeyi bir kez tarayarak sayın, ardından bu on sayımı toplayın. Her sesli harf bu on harften tam olarak birine eşittir, dolayısıyla bir kez sayılır; hiçbir sessiz harf de bunlardan herhangi birine eşit değildir.
Dizge on kez okunur. Bu yine de O(n) değerindedir, ancak 5 × 10^4 karakter için, her karakterin bir kez okunduğu tek bir taramaya kıyasla 5 × 10^5 karşılaştırma anlamına gelir.
Algoritma
total = 0olarak ayarla.aeiouAEIOUiçindeki on harfi teker teker al.- Her harf için dizgenin tamamını tara ve her karakter ona eşit olduğunda
totaldeğerini 1 artır. - On geçişten sonra
totaldeğerini döndür.
def countVowels(s):
total = 0
for vowel in "aeiouAEIOU":
total += s.count(vowel) # one pass over s for this letter
return totalKüçük harf kontrolüyle tek geçiş
Sezgi
Dizeyi bir kez okuyun ve her karakterin sesli harf olup olmadığını kontrol edin. Önce küçük harfe dönüştürmek, I karakterini i yapar ve ünsüzleri ünsüz olarak bırakır; böylece on harf yerine beş harfle karşılaştırma yaparsınız.
Kontrol sabit zaman alır: bir switch, küme araması veya aeiou dizesinde arama. Her karakter bir kez okunur ve yalnızca bir sayaç saklanır: O(n) zaman, O(1) alan.
Algoritma
count = 0olarak ayarla.- Dizgide karakter karakter ilerle.
- Karakteri küçük harfe dönüştür.
- Eğer
a,e,i,oveyauisecountdeğerini 1 artır. countdeğerini döndür.
def countVowels(s):
vowels = set("aeiou")
count = 0
for ch in s:
if ch.lower() in vowels:
count += 1
return count
Tuzaklar ve uç durumlar
- Yalnızca küçük harfleri kontrol etmek. Yalnızca
aeiouile karşılaştırmak,Interviewsözcüğündeki büyükIharfini gözden kaçırır ve 3 sonucunu verir. yharfini saymak. Burada bu harf hiçbir zaman sesli harf değildir; bu nedenlerhythm0 sonucunu verir.- 0 indeksini eşleşme değilmiş gibi değerlendirmek.
"aeiou".indexOf('a')0 değerini verir ve bu bir eşleşmedir.-1değerini kontrol edin veya PHP'destrpossonucunufalseile!==kullanarak karşılaştırın; çünkü orada0 == falseolur. - C'de döngü koşulunda
strlen(s)çağırmak. Bu, her adımda dizgeyi yeniden tarar; dolayısıyla5 × 10^4karakter yaklaşık2.5 × 10^9adım gerektirir.
Sıkça sorulan sorular3
Bir string içindeki ünlüleri nasıl sayarsın?
Bir sayaçla dizgede bir kez ilerle. Her karakteri küçük harfe dönüştür ve a, e, i, o veya u ise sayacı 1 artır. Döngü sona erdiğinde sayaç yanıtı tutar.
Sesli harfleri saymanın zaman karmaşıklığı nedir?
O(n); burada n dizenin uzunluğudur, çünkü her karakter en fazla beş harfe karşı bir kez kontrol edilir. Ek alan O(1)'dir: bir sayaç ve sabit ünlü kümesi.
Bu problemde y bir sesli harf midir?
Hayır. İngilizce yazımında y bazen rhythm sözcüğünde olduğu gibi ünlü harf görevi görür, ancak programlama problemleri ünlü harfleri neredeyse her zaman a, e, i, o ve u olarak tanımlar; bu problemde de öyle. Bir problem y harfini içeriyorsa, onu kontrol ettiğin harflere ekle.
Benzer problemler
Aynı fikirleri kullanan problemler. İki üçünü çözmek bir kalıbı kalıcı hale getirir.
def countVowels(s):
# Kodu buraya yazınTest #1
Test #2
Argüman
s = "Interview"
Beklenen Çıktı
4