Longest Substring Without Repeating Characters
Parcourez une chaîne pour trouver des séquences de caractères consécutifs où chaque caractère apparaît une seule fois. Dans coddycode, la séquence ycode contient cinq caractères différents, et aucune séquence plus longue n’évite les répétitions : la réponse est donc 5.
Vérifier toutes les séquences possibles fonctionne, mais c’est lent. Une méthode plus rapide maintient une fenêtre entre deux positions qui ne contient jamais de répétition. Déplacez le bord droit d’un caractère à la fois. Lorsque le nouveau caractère se trouve déjà dans la fenêtre, déplacez le bord gauche juste après l’endroit où ce caractère a été vu précédemment. Mémoriser la dernière position de chaque caractère rend ce déplacement instantané, de sorte que la chaîne n’est parcourue qu’une seule fois.
Écrivez une fonction nommée lengthOfLongestSubstring qui reçoit une chaîne s et renvoie la longueur de la plus longue sous-chaîne (une suite de caractères consécutifs) dans laquelle aucun caractère n’apparaît plus d’une fois.
Les lettres majuscules et minuscules sont des caractères différents : a et A ne sont donc pas des répétitions.
Contraintes : 1 <= s.length <= 5 * 10^4. s ne contient que des lettres anglaises (minuscules et majuscules) et des chiffres.
Fonction
- arg1string
- Renvoieinteger
Exemples
- Entrée
- arg1 = "coddycode"
- Sortie
- 5
- Entrée
- arg1 = "racecar"
- Sortie
- 4
- Entrée
- arg1 = "a1b2a3b"
- Sortie
- 5
+12 tests cachés à la soumission
Indices
Ouvrez-les un par un. Chacun en dévoile un peu plus.
Une sous-chaîne est une partie continue de la chaîne. Vous recherchez donc la plus longue séquence possible sans rencontrer deux fois le même caractère.
Gardez une fenêtre avec un bord gauche et un bord droit. Agrandissez-la à droite un caractère à la fois, et ne déplacez le bord gauche que lorsque le nouveau caractère se trouve déjà dans la fenêtre.
Enregistrez le dernier indice où chaque caractère est apparu. Si le nouveau caractère a été vu pour la dernière fois au niveau du bord gauche ou après celui-ci, déplacez le bord gauche juste après cet indice. Le bord gauche ne recule jamais, et la réponse est la fenêtre la plus large que vous ayez jamais eue.
Une explication complète de ce problème arrive bientôt.
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 lengthOfLongestSubstring(s):
# Écrivez le code iciCas 1
Cas 2
Cas 3
Entrée
arg1 = "coddycode"
Attendu
5