Problema
Find the shortest contiguous substring of text that contains every character of pattern, including repeats. If several are equally short, return the leftmost.
Implement min_window(text, pattern).
Input
text: The text to search. pattern: The characters that must appear.
Output
Return the shortest window, or an empty string if none exists.
Restricciones
1 ≤ length of text, pattern ≤ 100,000 (ASCII)
Ejemplos
Entrada:
text = "ADOBECODEBANC"
pattern = "ABC"
Salida esperada:
expected = "BANC"
Entrada:
std::string text = "ADOBECODEBANC";
std::string pattern = "ABC";
Salida esperada:
std::string expected = "BANC";
Entrada:
string text = "ADOBECODEBANC";
string pattern = "ABC";
Salida esperada:
string expected = "BANC";
Explicación
"BANC" contains A, B and C and nothing shorter does.
Entrada:
text = "a"
pattern = "aa"
Salida esperada:
expected = ""
Entrada:
std::string text = "a";
std::string pattern = "aa";
Salida esperada:
std::string expected = "";
Entrada:
string text = "a";
string pattern = "aa";
Salida esperada:
string expected = "";
Explicación
Two a's are needed but the text has only one: "".
Cómo abordarlo
Inténtalo primero por tu cuenta y luego abre las pistas una a una.
Pista 1
La ventana debe cubrir todos los conteos necesarios de caracteres, no solo los distintos.
Pista 2
Expande hasta que sea válida y luego contrae por la izquierda para quitar caracteres innecesarios sin dejar de ser válida.
Pista 3
Si varias ventanas tienen la misma longitud mínima, conserva la más temprana al actualizar la mejor respuesta.
Complejidad esperada
tiempo O(n), espacio extra O(1)
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.