Maximum Number of Balloons
Introducción
Analizamos un problema representativo de entrevistas técnicas para posiciones de software engineer en grandes tecnológicas: Maximum Number of Balloons. Es un reto clásico para evaluar razonamiento lógico y manipulación eficiente de cadenas (strings). En este artículo lo descomponemos desde cero: enunciado, errores comunes y construcción de la solución óptima paso a paso.
Enunciado del problema
Dado un string text, puedes utilizar cada carácter a lo sumo una vez para formar la palabra
balloon todas las veces que sea posible. Tu objetivo es determinar cuántas veces puedes formar
balloon con las letras presentes en text.
Entrada: text = "nlaebolko"
Salida: 1
Se puede formar “balloon” una vez.
Entrada: text = "loonbalxballpoon"
Salida: 2
Se puede formar “balloon” dos veces.
Entrada: text = "leetcode"
Salida: 0
Faltan varias letras para formar “balloon”.
Observaciones clave
Para formar balloon necesitas estas letras y cantidades:
count('b'), count('a'), count('l') // 2,
count('o') // 2, count('n'). Se divide por 2 en l y o porque cada “balloon” usa dos de cada una.
Paso a paso: solución óptima
- Contar frecuencias. Calcula cuántas veces aparece cada letra {b, a, l, o, n}.
- Dividir por la cantidad requerida. Para
lyodivide entre 2; parab,a,nes entre 1. - Tomar el mínimo. El resultado es el mínimo de esos cocientes.
Implementación en Python
from collections import Counter
def maxNumberOfBalloons(text: str) -> int:
counts = Counter(text)
return min(
counts.get('b', 0) // 1,
counts.get('a', 0) // 1,
counts.get('l', 0) // 2,
counts.get('o', 0) // 2,
counts.get('n', 0) // 1
)
Implementación en JavaScript
function maxNumberOfBalloons(text) {
const counts = { b: 0, a: 0, l: 0, o: 0, n: 0 };
for (const ch of text) {
if (ch in counts) counts[ch]++;
}
return Math.min(
counts.b,
counts.a,
Math.floor(counts.l / 2),
Math.floor(counts.o / 2),
counts.n
);
}
Complejidad
- Tiempo: O(n), un recorrido del string.
- Espacio: O(1), letras acotadas.
Casos de prueba adicionales
| Entrada | Salida | Explicación |
|---|---|---|
"balloonballoon" | 2 | Se puede formar exactamente dos veces. |
"bbaallllooooonnn" | 2 | Limitan b, a y n. |
"" | 0 | Cadena vacía. |
"balon" | 0 | Faltan letras repetidas. |
"ballooon" | 1 | Sobra una o pero falta una l. |
Maximum Number of Balloons
Introducción
Analizamos un problema representativo de entrevistas técnicas para posiciones de software engineer en grandes tecnológicas: Maximum Number of Balloons. Es un reto clásico para evaluar razonamiento lógico y manipulación eficiente de cadenas (strings). En este artículo lo descomponemos desde cero: enunciado, errores comunes y construcción de la solución óptima paso a paso.
Enunciado del problema
Dado un string text, puedes utilizar cada carácter a lo sumo una vez para formar la palabra
balloon todas las veces que sea posible. Tu objetivo es determinar cuántas veces puedes formar
balloon con las letras presentes en text.
Entrada: text = "nlaebolko"
Salida: 1
Se puede formar “balloon” una vez.
Entrada: text = "loonbalxballpoon"
Salida: 2
Se puede formar “balloon” dos veces.
Entrada: text = "leetcode"
Salida: 0
Faltan varias letras para formar “balloon”.
Observaciones clave
Para formar balloon necesitas estas letras y cantidades:
count('b'), count('a'), count('l') // 2,
count('o') // 2, count('n'). Se divide por 2 en l y o porque cada “balloon” usa dos de cada una.
Paso a paso: solución óptima
- Contar frecuencias. Calcula cuántas veces aparece cada letra {b, a, l, o, n}.
- Dividir por la cantidad requerida. Para
lyodivide entre 2; parab,a,nes entre 1. - Tomar el mínimo. El resultado es el mínimo de esos cocientes.
Implementación en Python
from collections import Counter
def maxNumberOfBalloons(text: str) -> int:
counts = Counter(text)
return min(
counts.get('b', 0) // 1,
counts.get('a', 0) // 1,
counts.get('l', 0) // 2,
counts.get('o', 0) // 2,
counts.get('n', 0) // 1
)
Implementación en JavaScript
function maxNumberOfBalloons(text) {
const counts = { b: 0, a: 0, l: 0, o: 0, n: 0 };
for (const ch of text) {
if (ch in counts) counts[ch]++;
}
return Math.min(
counts.b,
counts.a,
Math.floor(counts.l / 2),
Math.floor(counts.o / 2),
counts.n
);
}
Complejidad
- Tiempo: O(n), un recorrido del string.
- Espacio: O(1), letras acotadas.
Casos de prueba adicionales
| Entrada | Salida | Explicación |
|---|---|---|
"balloonballoon" | 2 | Se puede formar exactamente dos veces. |
"bbaallllooooonnn" | 2 | Limitan b, a y n. |
"" | 0 | Cadena vacía. |
"balon" | 0 | Faltan letras repetidas. |
"ballooon" | 1 | Sobra una o pero falta una l. |
Problema Real de Entrevista Técnica (Tesla): Maximum Number of Balloons