Contenido del curso
Dos Apuntadores
- 3

Patrón de Dos Apuntadores en Algoritmos de Lista
02:56 min - 4

Verificación de Orden en Diccionario Alienígena
02:56 min - 5

Ordenamiento de Palabras en Idiomas Alienígenas
12:04 min - 6

Playground: Verifying Alien Dictionary
- 7

Ordenación de Palabras en Diccionario Alienígena
15:07 min - 8

Combinar Listas Ordenadas en un Array Ascendente
02:11 min - 9

Ordenamiento de Listas con Complejidad Óptima y Espacio Constante
11:44 min - 10

Playground: Merge Two Sorted Lists
- 11

Intercalación de Listas Ordenadas en Python
09:04 min - 12

Resolver el problema "Container with Most Water" en Python
01:18 min - 13

Cálculo Óptimo de Área en Listas de Alturas
09:02 min - 14

Playground: Container with Most Water
- 15

Implementación de solución de cálculo de área máxima en Java
15:42 min - 16

Implementación de Trapping Rainwater en Complejidad Lineal
01:02 min - 17

Retos de Algoritmos con Apuntadores en Python
02:44 min - 18

Patrones de Dos Apuntadores: Soluciones a Problemas Comunes en Python
06:43 min
Ventana Deslizante
- 19

Patrón Ventana Deslizante para Análisis de Datos Secuenciales
02:32 min - 20

Subcadena más larga sin caracteres repetidos: patrón ventana deslizante
Viendo ahora - 21

Algoritmo de Ventana Deslizante para Subcadenas Únicas
11:05 min - 22

Playground: Longest Substring Without Repeating Characters
- 23

Algoritmo Python para Substring más Largo Sin Repeticiones
14:16 min - 24

Retos de Algoritmos: Dos Apuntadores y Subcadenas
01:50 min - 25

Máximos 1s Consecutivos y Subcadenas sin Repeticiones
03:22 min
Búsqueda Binaria
- 26

Algoritmo de búsqueda binaria en listas ordenadas
09:26 min - 27

Búsqueda en Arrays Rotados: Encontrar Entero en Lista Ordenada
02:19 min - 28

Búsqueda Binaria en Arreglos Rotados
04:59 min - 29

Playground: Search in Rotated Arrays
- 30

Búsqueda en Arrays Rotados con C++
10:53 min - 31

Búsqueda eficiente en matriz ordenada MxN
01:44 min - 32

Búsqueda Binaria en Matrices 2D Ordenadas
06:33 min - 33

Playground: Search 2D Array Matrix
- 34

Búsqueda Binaria en Matrices con Python
07:48 min
Próximos pasos
Subcadena más larga sin caracteres repetidos: patrón ventana deslizante
Resumen
Encontrar la subcadena más larga sin caracteres repetidos es uno de los problemas clásicos que pone a prueba tu dominio del patrón ventana deslizante (sliding window). Este ejercicio, conocido como longest substring without repeating characters, aparece con frecuencia en entrevistas técnicas y es ideal para practicar cómo optimizar soluciones hasta alcanzar una complejidad temporal O(n).
¿En qué consiste el problema de la subcadena más larga sin repetir caracteres?
Dada una cadena de texto S, el objetivo es determinar la longitud de la subcadena más larga que no contenga caracteres repetidos [0:22]. No se pide devolver la subcadena en sí, sino únicamente su longitud.
Por ejemplo, con la entrada ABCABCBB:
- La subcadena
ABCtiene longitud 3. - Al llegar a la segunda
A, el carácter se repite y la subcadena debe reiniciarse. - Otras combinaciones posibles como
BCAoCABtambién tienen longitud 3. - Ninguna subcadena sin repeticiones supera esa longitud, por lo que la respuesta es 3 [0:37].
El mismo razonamiento aplica para cadenas más largas: se recorre el texto buscando la ventana de mayor tamaño donde todos los caracteres sean únicos.
¿Por qué importa la longitud y no la subcadena?
El problema pide exclusivamente un valor numérico. Esto simplifica la implementación porque no necesitas almacenar ni comparar cadenas completas, solo rastrear qué caracteres están dentro de tu ventana actual y cuál es el tamaño máximo alcanzado [1:03].
¿Cómo se aplica el patrón ventana deslizante a este problema?
El patrón ventana deslizante consiste en mantener dos punteros que definen los límites de una sección de la cadena. A medida que avanzas:
- Expandes la ventana moviendo el puntero derecho para incluir un nuevo carácter.
- Contraes la ventana moviendo el puntero izquierdo cuando detectas un carácter repetido.
- En cada paso, actualizas la longitud máxima registrada.
Este enfoque permite recorrer la cadena una sola vez, logrando la complejidad temporal O(n) que se plantea como reto [1:14]. Para verificar si un carácter ya existe dentro de la ventana, puedes utilizar un set o un hash map, estructuras que ofrecen búsqueda e inserción en tiempo constante.
¿Qué pasos seguir antes de implementar?
Antes de escribir código, es fundamental diseñar la solución en papel o pseudocódigo [1:20]:
- Define claramente los dos punteros (inicio y fin de la ventana).
- Elige la estructura de datos para rastrear caracteres vistos.
- Establece las condiciones para expandir y contraer la ventana.
- Identifica cuándo y cómo actualizar la longitud máxima.
Este paso de diseño previo te ayuda a evitar errores comunes como no manejar correctamente el reinicio de la ventana cuando aparece un carácter duplicado.
¿Por qué buscar una solución O(n) y no una más simple?
Una solución por fuerza bruta revisaría todas las posibles subcadenas, lo que resulta en una complejidad de O(n²) o peor. Con el patrón ventana deslizante, cada carácter se visita como máximo dos veces (una al expandir y otra al contraer), garantizando un rendimiento lineal. Esta diferencia es crítica cuando las cadenas de entrada son muy largas.
Intenta diseñar tu propia solución con complejidad O(n) antes de ver la implementación. Comparte en los comentarios cómo fue tu proceso y qué estructura de datos elegiste para rastrear los caracteres dentro de la ventana.