Longest Substring Without Repeating Characters
Busca en una cadena secuencias de caracteres consecutivos en las que cada carácter aparezca solo una vez. En coddycode, la secuencia ycode tiene cinco caracteres diferentes, y ninguna secuencia más larga evita las repeticiones, así que la respuesta es 5.
Comprobar todas las secuencias posibles funciona, pero es lento. Un método más rápido mantiene una ventana entre dos posiciones que nunca contiene repeticiones. Mueve el borde derecho un carácter cada vez. Cuando el carácter nuevo ya está dentro de la ventana, salta el borde izquierdo justo después del lugar donde se vio ese carácter antes. Recordar la última posición de cada carácter hace que ese salto sea instantáneo, así que la cadena se lee una sola vez.
Escribe una función llamada lengthOfLongestSubstring que reciba una cadena s y devuelva la longitud de la subcadena más larga (una secuencia de caracteres consecutivos) en la que ningún carácter aparezca más de una vez.
Las letras mayúsculas y minúsculas son caracteres diferentes, así que a y A no se consideran repetidos.
Restricciones: 1 <= s.length <= 5 * 10^4. s contiene solo letras inglesas (minúsculas y mayúsculas) y dígitos.
Función
- arg1string
- Devuelveinteger
Ejemplos
- Entrada
- arg1 = "coddycode"
- Salida
- 5
- Entrada
- arg1 = "racecar"
- Salida
- 4
- Entrada
- arg1 = "a1b2a3b"
- Salida
- 5
+12 pruebas ocultas al enviar
Pistas
Ábrelas de una en una. Cada una revela un poco más.
Una subcadena es una parte continua de la cadena, así que buscas el tramo más largo que puedas recorrer sin encontrarte dos veces con el mismo carácter.
Mantén una ventana con un borde izquierdo y uno derecho. Hazla crecer por la derecha un carácter a la vez y mueve el borde izquierdo solo cuando el nuevo carácter ya esté dentro de la ventana.
Guarda el último índice en el que apareció cada carácter. Si el carácter nuevo se vio por última vez en el borde izquierdo o después de este, mueve el borde izquierdo a un índice más allá de ese. El borde izquierdo nunca retrocede, y la respuesta es la ventana más amplia que hayas tenido.
Pronto habrá una explicación completa de este problema.
Problemas similares
Problemas que usan las mismas ideas. Resolver dos o tres es lo que fija un patrón.
Python
def lengthOfLongestSubstring(s):
# Escribe el código aquíCaso 1
Caso 2
Caso 3
Entrada
arg1 = "coddycode"
Esperado
5