To Lower Case
Vous recevez une chaîne s. Retournez une nouvelle chaîne dans laquelle chaque lettre majuscule anglaise, de A à Z, est remplacée par sa lettre minuscule. Tous les autres caractères, comme une lettre minuscule, un chiffre ou un symbole, restent exactement tels quels.
Fonction
- sstring
- le texte à convertir
- Renvoiestring
- s avec chaque lettre majuscule mise en minuscule
Contraintes
1 ≤ s.length ≤ 104- Chaque caractère de
sest une lettre de l’alphabet anglais, un chiffre ou l’un des symboles!#$%&()*+-./:;<=>?@[]^_`{|}~.
Exemples
- Entrée
- s = "Hello-World!"
- Sortie
- "hello-world!"
- Explication
- Les majuscules
HetWdeviennenthetw. Le-et le!ne sont pas des lettres, ils restent donc là où ils sont.
- Entrée
- s = "coddy_2026"
- Sortie
- "coddy_2026"
- Explication
- Il n’y a aucune lettre majuscule à modifier. Les lettres minuscules, le
_et les chiffres restent inchangés.
- Entrée
- s = "SQL"
- Sortie
- "sql"
- Explication
- Les trois caractères sont des majuscules, donc chacun est remplacé par sa lettre minuscule.
+15 tests cachés à la soumission
Pour aller plus loin
Peux-tu écrire toUpperCase avec la même boucle et expliquer pourquoi un seul bit du code du caractère diffère entre A et a ?
Indices
Ouvrez-les un par un. Chacun en dévoile un peu plus.
Un ordinateur stocke chaque caractère sous forme de nombre. Quel est le lien entre les nombres correspondant à
Aet àa?AàZcorrespondent aux codes 65 à 90, etaàzaux codes 97 à 122. Chaque majuscule est exactement 32 en dessous de sa lettre minuscule.Parcourez les caractères un par un. Si un code est compris entre 65 et 90, ajoutez 32 ; sinon, conservez le caractère. Rassemblez les résultats et concaténez-les pour obtenir la réponse.
Solution
Chaque langage fournit une fonction de conversion en minuscules, et dans le code de production, tu devrais l’appeler. Les recruteurs posent cette question pour vérifier si tu sais ce que fait cette fonction : un caractère est un nombre, et en ASCII, chaque lettre majuscule se trouve exactement 32 codes avant sa lettre minuscule. Vérifie si un code se situe entre 'A' et 'Z', et ajoute 32 si c’est le cas.
Appeler la fonction intégrée de conversion en minuscules
Intuition
Les fonctions lower() de Python, toLowerCase() de JavaScript, downcase de Ruby et leurs équivalents dans les autres langages font déjà ce travail. C et C++ proposent tolower pour un seul caractère, alors vous l’appelez dans une boucle. Chaque caractère est examiné une fois, le travail est donc en O(n), et la nouvelle chaîne occupe un espace de O(n).
Certaines de ces fonctions suivent les paramètres régionaux de la machine. En turc, la minuscule de I est un ı sans point, et non un i. C’est pourquoi les versions Java et C# demandent une règle fixe avec Locale.ROOT et ToLowerInvariant, afin que le résultat ne change pas d’un ordinateur à l’autre.
C’est la bonne réponse dans le cadre du travail. En entretien, elle n’est souvent pas acceptée, car elle masque l’idée même sur laquelle porte la question.
Algorithme
- Appelez la fonction de conversion en minuscules de votre langage sur
s, ou appeleztolowersur chaque caractère en C et C++. - Demandez une règle fixe, indépendante de la langue, lorsque la fonction en propose une.
- Renvoyez le résultat.
def toLowerCase(s):
return s.lower()Décaler les codes de caractères des lettres majuscules
Intuition
Chaque caractère est stocké sous forme de nombre. En ASCII, A à Z correspondent aux codes 65 à 90, et a à z aux codes 97 à 122. Les deux séquences sont dans l’ordre alphabétique et commencent à 32 d’écart : la minuscule de toute majuscule a donc pour code celui-ci plus 32 : H correspond à 72 et h à 104.
Parcours donc la chaîne une seule fois. Si un code est compris entre 65 et 90, ajoute 32 ; sinon, copie le caractère tel quel. La vérification de la plage est importante : les symboles [, ^ et _ se trouvent entre Z et a, et @ se trouve juste avant A. Tester uniquement code < 97 transformerait _ en un autre symbole.
Chaque caractère est vérifié une fois, ce qui correspond à un temps en O(n). Le résultat est une nouvelle chaîne de même longueur, avec un espace en O(n). Écrire 'a' - 'A' au lieu de 32 revient au même et explique d’où vient ce nombre.
Algorithme
- Copiez
sdans un tableau de caractères ou de codes. - Pour chaque position, lisez le code du caractère.
- Si le code est compris entre
'A'(65) et'Z'(90), ajoutez 32. - Reconvertissez le tableau en chaîne et renvoyez-la.
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)
Pièges et cas limites
La boucle est courte ; les erreurs se trouvent donc dans la vérification de la plage et dans la manière de construire la réponse.
- Ajouter 32 à chaque caractère qui n’est pas une minuscule. Les chiffres et les symboles changeraient aussi :
1deviendraitQ. - Vérifier une seule extrémité de la plage.
code < 'a'inclut aussi[,_et@, etcode >= 'A'inclut aussi toutes les minuscules. - Utiliser
<au lieu de<=aux extrémités, ce qui laisseAouZen majuscule. - Construire la réponse avec
result = result + chsur une chaîne immuable. Chaque étape recopie tout le contenu déjà traité, ce qui entraîne une complexité quadratique pourn = 10^4. - En C, écrire dans l’entrée ou oublier le
'\0'de fin. Allouern + 1octets pour la copie.
Questions fréquentes4
Comment convertir une chaîne en minuscules sans fonction intégrée ?
Parcourez les caractères et examinez le code de chaque caractère. Si le code est compris entre 65 (A) et 90 (Z), ajoutez 32 pour obtenir la lettre minuscule ; laissez tous les autres caractères tels quels. Rejoignez les caractères pour reformer une chaîne.
Pourquoi la différence entre les majuscules et les minuscules est-elle de 32 ?
ASCII place les majuscules aux codes 65 à 90 et les minuscules aux codes 97 à 122, avec six symboles entre les deux. Les deux alphabets sont dans le même ordre, donc chaque paire est séparée de 97 - 65 = 32. 32 correspond à un seul bit, donc mettre ce bit à 1 transforme une majuscule en sa minuscule.
Peux-tu changer la casse à l’aide d’une opération bit à bit ?
Oui. Pour une lettre majuscule, code | 32 définit le bit qui distingue les deux casses et donne la lettre minuscule, et code & ~32 le désactive à nouveau. Il faut tout de même vérifier d’abord la plage, car cette même astuce sur les bits modifierait aussi les chiffres et les symboles.
Quelle est la complexité temporelle de la conversion d’une chaîne en minuscules ?
C’est O(n) pour une chaîne de longueur n, car chaque caractère est vérifié une seule fois. La nouvelle chaîne occupe un espace de O(n). Si tu peux modifier un tableau de caractères sur place, l’espace supplémentaire passe à O(1).
Problèmes similaires
Des problèmes qui reposent sur les mêmes idées. En résoudre deux ou trois, c’est ce qui ancre un schéma.
Python
def toLowerCase(s):
# Écrivez le code iciCas 1
Cas 2
Cas 3
Entrée
s = "Hello-World!"
Attendu
"hello-world!"