http://acm.hdu.edu.cn/showproblem.php?pid=1004
Use un diccionario para contar el número de ocurrencias de cada cadena.
Entrada :
Hay varios casos. La primera línea de cada caso es un número entero n, lo que indica que hay n líneas debajo y cada línea tiene n cadenas.
Cuando n es 0, significa que el caso ha terminado.
Salida:
Para cada caso, genere la cadena con la mayor cantidad de apariciones.
Puntos clave:
1. Utilice una tabla hash para almacenar el número de veces que corresponde la cadena. Si se usa una tabla de secuencia, la complejidad del tiempo es aproximadamente o (n * n) y la velocidad es lenta.
2 、 字典 定义 。Diccionario <cadena, int> cuenta_color = nuevo Diccionario <cadena, int> ();
Su esencia es una tabla hash.
3. Determine si existe una clave en el diccionario.
if (cuenta_color.ContainsKey (color))
{
}
4. El valor correspondiente a la clave se incrementa en 1. color_count [color] + = 1;
5. Encuentra la clave con el valor más grande.
int max_val = 0;
string max_color = "";
foreach (KeyValuePair <string, int> kvp en color_count)
{ if (kvp.Value> max_val) { max_val = kvp.Value; max_color = kvp.Key; } } Console.WriteLine (max_color);
El código completo es el siguiente:
using System;
using System.Collections.Generic;
namespace test
{
class Program
{
static void Main(string[] args)
{
while (true)
{
string s = Console.ReadLine();
int x = int.Parse(s);//输入共有多少行
if (x == 0)
return;
Dictionary<string, int> color_count = new Dictionary<string, int>();
for (int i = 0; i < x; i++)
{
string color = Console.ReadLine();
if (color_count.ContainsKey(color))
{
color_count[color] += 1;
}
else
{
color_count[color] = 1;
}
}
int max_val = 0;
string max_color="";
foreach (KeyValuePair<string, int> kvp in color_count)
{
if(kvp.Value>max_val)
{
max_val = kvp.Value;
max_color = kvp.Key;
}
}
Console.WriteLine(max_color);
}
}
}
}