UVa 1449 tiene varios componentes:
- Cargar los patrones
- Cuente la aparición de cada patrón en la cadena de entrada
- Salida de los patrones dominantes
- Repita según sea necesario (hasta que el recuento de patrones sea 0)
Debe resolver cada una de esas partes, y podría usar una tabla hash para ayudar (aunque ciertamente no es necesario).
Imagine que la primera entrada es:
- ¿Alguien puede aprender programación, algoritmos y estructuras de datos en tres meses y obtener el bronce en la Olimpiada Británica de Informática?
- ¿Cuál es el algoritmo más poderoso en el mundo de las aplicaciones?
- ¿Cuánta competencia en la estructura de datos y el algoritmo es más que suficiente para ingresar a Google / Facebook y cuál debería ser la estrategia de 4 meses para aprenderlo?
- Si está utilizando Java durante las entrevistas algorítmicas, ¿puede omitir las clases de escritura y acceder directamente a los métodos?
- ¿Qué algoritmo puedo usar para generar enteros (pseudo) aleatorios con una duración de ciclo infinito?
2
foo
bar
bingfoofoobarfoopipobazboo
Comenzamos por ver que hay dos patrones: foo y bar.
Así que vamos a hacer algo así …
patrones [“foo”] = 0
patrones [“bar”] = 0
Esto está utilizando una tabla hash (o cualquier tipo de matriz asociativa) para asignar los patrones a un contador.
Ahora haces algo como esto:
foreach (patrón en patrones) {
patrones [patrón] = recuento (patrón, entrada)
}
La forma de implementar el recuento depende de usted.
Ahora su tabla hash se ve así:
patrones [“foo”] = 3
patrones [“bar”] = 1
El patrón dominante es foo.
Entonces imprime su salida:
3
foo
La tabla hash no es la clave de la solución: es simplemente un mecanismo para asignar el patrón al recuento de ocurrencias para que pueda encontrar el patrón dominante.