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
l
yo
divide entre 2; parab
,a
,n
es 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
l
yo
divide entre 2; parab
,a
,n
es 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 Tesla: Maximum Number of Balloons