Count Vowels
Dada uma string s de letras do alfabeto inglês, retorne quantos de seus caracteres são vogais. As vogais são a, e, i, o e u, em letras minúsculas ou maiúsculas. A letra y não conta.
Função
- sstring
- a sequência de letras em inglês a ser examinada
- Retornainteger
- o número de vogais em s, maiúsculas e minúsculas juntas
Restrições
1 ≤ s.length ≤ 5 × 104scontém apenas letras do alfabeto inglês (aaz,AaZ).
Exemplos
- Entrada
- s = "Interview"
- Saída
- 4
- Explicação
- As vogais são
I,e,iee. OImaiúsculo conta como uma letra minúscula, então a resposta é 4.
- Entrada
- s = "rhythm"
- Saída
- 0
- Explicação
rhythmnão tema,e,i,onemu, eynão está na lista, então a resposta é 0.
Para ir além
Você consegue retornar quantas vezes cada uma das cinco vogais aparece, lendo a string apenas uma vez?
Dicas
Abra uma de cada vez. Cada uma revela um pouco mais.
Observe os caracteres um por um. O que faz um caractere ser uma vogal, e o uso de maiúsculas muda a resposta?
Converta cada caractere para minúsculas antes de testá-lo. Depois, compare com cinco letras em vez de dez.
Mantenha um contador que comece em 0. Para cada caractere, converta-o para minúscula e adicione 1 ao contador quando ele for
a,e,i,oouu.
Solução
Leia a string uma vez usando um contador. Converta cada caractere para minúsculas, assim uma verificação das cinco vogais abrange ambos os casos.
Conte cada vogal em uma passagem separada
Intuição
Conte cada uma das dez letras em aeiouAEIOU com uma passagem própria pela string e, em seguida, some as dez contagens. Cada vogal corresponde exatamente a uma das dez letras, então é contada uma vez, e nenhuma consoante corresponde a nenhuma delas.
A string é lida dez vezes. Isso ainda é O(n), mas, para 5 × 10^4 caracteres, isso significa 5 × 10^5 comparações, enquanto uma passagem lê cada caractere uma vez.
Algoritmo
- Defina
total = 0. - Pegue as dez letras
aeiouAEIOUuma de cada vez. - Para cada letra, percorra a string inteira e adicione 1 a
totalsempre que um caractere for igual a ela. - Após as dez passagens, retorne
total.
def countVowels(s):
total = 0
for vowel in "aeiouAEIOU":
total += s.count(vowel) # one pass over s for this letter
return totalUma passagem com uma verificação de letras minúsculas
Intuição
Leia a string uma vez e verifique se cada caractere é uma vogal. Convertê-la para minúsculas primeiro transforma I em i e mantém as consoantes como consoantes, então você compara com cinco letras em vez de dez.
A verificação leva tempo constante: um switch, uma busca em um conjunto ou uma busca na string aeiou. Cada caractere é lido uma vez e apenas um contador é armazenado: tempo O(n), espaço O(1).
Algoritmo
- Defina
count = 0. - Percorra a string um caractere por vez.
- Converta o caractere para minúsculas.
- Se for
a,e,i,oouu, adicione 1 acount. - Retorne
count.
def countVowels(s):
vowels = set("aeiou")
count = 0
for ch in s:
if ch.lower() in vowels:
count += 1
return count
Armadilhas e casos extremos
- Verificar apenas letras minúsculas. Comparar apenas com
aeiounão detecta oImaiúsculo emInterviewe retorna 3. - Contar
y. Aqui, ela nunca é uma vogal, entãorhythmresulta em 0. - Tratar o índice 0 como uma ausência.
"aeiou".indexOf('a')é 0, o que significa que houve uma correspondência. Teste se o valor é-1ou, em PHP, comparestrposcomfalseusando!==, porque em PHP0 == false. - Chamar
strlen(s)na condição do loop em C. Isso percorre a string novamente a cada etapa, então5 × 10^4caracteres custam cerca de2.5 × 10^9etapas.
Perguntas frequentes3
Como contar as vogais em uma string?
Percorra a string uma vez usando um contador. Converta cada caractere para minúsculas e adicione 1 se ele for a, e, i, o ou u. Quando o loop terminar, o contador conterá a resposta.
Qual é a complexidade de tempo da contagem de vogais?
O(n), em que n é o comprimento da string, porque cada caractere é verificado uma vez em relação a no máximo cinco letras. O espaço extra é O(1): um contador e o conjunto fixo de vogais.
y é uma vogal neste problema?
Não. Na ortografia inglesa, y às vezes funciona como vogal, como em rhythm, mas os problemas de programação quase sempre definem as vogais como a, e, i, o e u, e este é um deles. Se um problema incluir y, adicione-o às letras que você verifica.
Problemas parecidos
Problemas que usam as mesmas ideias. Resolver dois ou três é o que fixa um padrão.
def countVowels(s):
# Escreva o código aquiTeste #1
Teste #2
Argumento
s = "Interview"
Saída Esperada
4