心血来潮
http://hero.pongo.cn/home/index
/*
* 我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,
* 但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。
* 现在给定一个字符串,输出它的最大可能的完美度。
* 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。
* 函数头部 C int perfect(const char *s);
* C++ int perfect(const string &s);
* java public static int perfect(String s);
*/
//是计算词频的问题
static void Main(string[] args)
{
string s="hello world !";
int r = perfect(s);
Console.WriteLine("字符串 {0} 的完美度是 {1}", s, r);
}
private static int perfect(string s)
{
int result = 0;
s = s.ToLower();//不区分大小写
Dictionary<char, int> dict1 = new Dictionary<char, int>();
for (int i = 0; i < s.Length;i++)
{
char c = s[i];
if (c<'a' || c>'z')
{
Console.WriteLine("{0} 不是字母不算数哦~",c);
continue;
}
if (dict1.ContainsKey(c))
{
int t=dict1[c];
dict1.Remove(c);
dict1.Add(c, t + 1);
}
else
{
dict1.Add(c, 1);
}
}
if (dict1.Count>26)
{
Console.WriteLine("奇观!字母个数多于26个!");
}
Dictionary<char, int> dict2 =dict1.OrderByDescending(k => k.Value).ToDictionary(k => k.Key, k => k.Value);
int alpha = 26;
foreach (KeyValuePair<char,int> p in dict2)
{
Console.WriteLine("字符{0} 词频 {1} 权重{2}", p.Key, p.Value,alpha);
result += alpha * p.Value;
alpha--;
}
return result;
}
文本处理和分析的应用领域很广泛