To Lower Case
Você recebe uma string s. Retorne uma nova string na qual cada letra maiúscula do inglês, de A a Z, seja substituída por sua letra minúscula. Todos os outros caracteres, como uma letra minúscula, um dígito ou um símbolo, permanecem exatamente como estão.
Função
- sstring
- o texto a converter
- Retornastring
- s com cada letra maiúscula convertida em minúscula
Restrições
1 ≤ s.length ≤ 104- Cada caractere de
sé uma letra do alfabeto inglês, um dígito ou um dos símbolos!#$%&()*+-./:;<=>?@[]^_`{|}~.
Exemplos
- Entrada
- s = "Hello-World!"
- Saída
- "hello-world!"
- Explicação
- As letras maiúsculas
HeWse tornamhew. O-e o!não são letras, então permanecem onde estão.
- Entrada
- s = "coddy_2026"
- Saída
- "coddy_2026"
- Explicação
- Não há nenhuma letra maiúscula para alterar. As letras minúsculas, o
_e os dígitos permanecem inalterados.
- Entrada
- s = "SQL"
- Saída
- "sql"
- Explicação
- Os três caracteres são maiúsculos, então cada um passa para sua letra minúscula.
+15 testes ocultos ao enviar
Para ir além
Você consegue escrever toUpperCase com o mesmo loop e explicar por que apenas um bit do código do caractere é diferente entre A e a?
Dicas
Abra uma de cada vez. Cada uma revela um pouco mais.
Um computador armazena cada caractere como um número. Como os números de
Aease relacionam?AaZcorrespondem aos códigos de 65 a 90, eaaz, de 97 a 122. Cada letra maiúscula está exatamente 32 abaixo de sua letra minúscula.Percorra os caracteres um por um. Quando um código estiver entre 65 e 90, some 32; caso contrário, mantenha o caractere. Reúna os resultados e junte-os na resposta.
Solução
Toda linguagem oferece uma função para converter para minúsculas, e você deve usá-la em código de produção. Os entrevistadores fazem essa pergunta para ver se você sabe o que essa função faz: um caractere é um número e, em ASCII, cada letra maiúscula está exatamente 32 códigos abaixo de sua versão minúscula. Verifique se um código está entre 'A' e 'Z' e, se estiver, adicione 32.
Chame a função integrada lowercase
Intuição
O lower() do Python, o toLowerCase() do JavaScript, o downcase do Ruby e seus equivalentes em todas as outras linguagens já fazem esse trabalho. C e C++ oferecem tolower para um caractere, então você o chama em um loop. Cada caractere é analisado uma vez, então o trabalho é O(n), e a nova string ocupa O(n) de espaço.
Algumas dessas funções seguem as configurações de idioma da máquina. Em turco, a letra minúscula de I é ı, sem ponto, e não i. Por isso, as versões em Java e C# pedem uma regra fixa com Locale.ROOT e ToLowerInvariant, para que o resultado não mude de um computador para outro.
Essa é a resposta certa no trabalho. Em uma entrevista, muitas vezes ela não é aceita, porque esconde a ideia central da pergunta.
Algoritmo
- Chame a função de conversão para minúsculas da sua linguagem em
sou chametolowerpara cada caractere em C e C++. - Peça uma regra fixa e independente da linguagem, quando a função oferecer essa opção.
- Retorne o resultado.
def toLowerCase(s):
return s.lower()Desloque os códigos dos caracteres das letras maiúsculas
Intuição
Cada caractere é armazenado como um número. Em ASCII, A até Z são os códigos de 65 a 90, e a até z são de 97 a 122. Ambos os intervalos estão em ordem alfabética e começam com uma diferença de 32, então a versão minúscula de qualquer letra maiúscula tem código igual ao dela mais 32: H é 72 e h é 104.
Então percorra a string uma vez. Se um código estiver entre 65 e 90, some 32; caso contrário, copie o caractere como está. A verificação do intervalo é importante: os símbolos [, ^ e _ ficam entre Z e a, e @ fica logo antes de A. Testar apenas code < 97 transformaria _ em outro símbolo.
Cada caractere é verificado uma vez, o que leva tempo O(n). A resposta é uma nova string com o mesmo comprimento, usando espaço O(n). Escrever 'a' - 'A' em vez de 32 diz a mesma coisa e explica de onde vem esse número.
Algoritmo
- Copie
spara um array de caracteres ou códigos. - Para cada posição, leia o código do caractere.
- Se o código estiver entre
'A'(65) e'Z'(90), adicione 32. - Transforme o array de volta em uma string e retorne-a.
def toLowerCase(s):
# Every capital letter sits 32 codes below its small letter: 'A' is 65, 'a' is 97.
shift = ord("a") - ord("A")
chars = []
for ch in s:
if "A" <= ch <= "Z":
ch = chr(ord(ch) + shift)
chars.append(ch)
return "".join(chars)
Armadilhas e casos extremos
O loop é curto, então os erros estão na verificação do intervalo e na forma como a resposta é construída.
- Adicionar 32 a cada caractere que não seja minúsculo. Os dígitos e símbolos também mudariam:
1se tornariaQ. - Verificar apenas uma extremidade do intervalo.
code < 'a'também inclui[,_e@, ecode >= 'A'também inclui todas as letras minúsculas. - Usar
<em vez de<=nas extremidades, o que deixaAouZem maiúsculas. - Construir a resposta com
result = result + chem uma string imutável. Cada etapa copia tudo o que foi acumulado até então, o que resulta em complexidade quadrática paran = 10^4. - Em C, escrever na entrada ou esquecer o
'\0'terminador. Aloquen + 1bytes para a cópia.
Perguntas frequentes4
Como converter uma string para letras minúsculas sem usar uma função integrada?
Percorra os caracteres e examine o código de cada um. Se o código estiver entre 65 (A) e 90 (Z), some 32 para obter a letra minúscula; deixe todos os outros caracteres como estão. Junte os caracteres novamente em uma string.
Por que a diferença entre letras maiúsculas e minúsculas é 32?
O ASCII posiciona as letras maiúsculas nos códigos de 65 a 90 e as letras minúsculas de 97 a 122, com seis símbolos entre elas. Os dois alfabetos estão na mesma ordem, então cada par está separado por 97 - 65 = 32. 32 corresponde a um único bit, então definir esse bit transforma uma letra maiúscula em sua correspondente minúscula.
Você consegue alterar entre maiúsculas e minúsculas com uma operação bit a bit?
Sim. Para uma letra maiúscula, code | 32 define o bit que diferencia as duas formas e produz a letra minúscula, e code & ~32 o limpa novamente. Você ainda precisa verificar o intervalo primeiro, porque o mesmo truque com bits também alteraria dígitos e símbolos.
Qual é a complexidade de tempo de converter uma string para minúsculas?
É O(n) para uma string de comprimento n, porque cada caractere é verificado uma vez. A nova string ocupa O(n) de espaço. Se você puder alterar um array de caracteres no próprio lugar, o espaço extra cai para O(1).
Problemas parecidos
Problemas que usam as mesmas ideias. Resolver dois ou três é o que fixa um padrão.
Python
def toLowerCase(s):
# Escreva o código aquiCaso 1
Caso 2
Caso 3
Entrada
s = "Hello-World!"
Esperado
"hello-world!"