长为10000的字符串,由a-z及A-Z组成,统计出其中出现频率最高的字母

/*Author:shizhixin
Email:szhixin@gmail.com
Blog:http://blog.youkuaiyun.com/ShiZhixin
Date:Dec 14,2009
Function:长为10000的字符串,由a-z及A-Z组成,统计出其中出现频率最高的字母
算法思想:
声明一个长度为52的数组nCountTable,遍历一遍待查数组,对于其出现的任意字母charCurrent,将nCountTable[charCurrent-'a']++,最后遍历一下nCountTable,查找最大的。
Note:同学在面试时碰见这个题目,略感兴趣。这个算法是自己实现的,注意题目要求字符串中只包含a-z,A-Z,程序如有错误,或更好的实现算法,希来邮件告知,倍感高兴。
*/

#include "iostream.h"

//遍历一下nTable数组中最大的数,并返回其下标,n为数组大小
int GetMaxCount(int nTable[],int n)
{
 int max=0;
 int k=0;
 for (int i=0;i<n;i++)
 {
  if (nTable[i]>max)
  {
   max=nTable[i];
   k=i;
  }
 }
 return k;
}

void main()
{
 char* cpStr="httpblogcsdnnetShiZhixin";//待查找字符串,字符串中只包含a-z,A-Z
 int nCountTable[52]={0};//统计频率表
 int nCountTemp;//当前字符的ASCII
 do
 {
  nCountTemp=*cpStr;
  if (nCountTemp>='a')
  {
   nCountTemp-='a'-26;//a-z
  }
  else
  {
   nCountTemp-='A';//A-Z
  }
  nCountTable[nCountTemp]++;
  cpStr++;
 } while (*cpStr!='/0');

 int nMaxCount=GetMaxCount(nCountTable,52);//遍历频率表,查找出现频率最多的下标
 char cMax=nMaxCount;
 if (nMaxCount>=26)
 {
  cMax+='a'-26;//a-z
 }
 else
 {
  cMax+='A';//A-Z
 }
 cout<<"字符串中频率最多的字符是:"<<cMax<<" "<<"共有"<<nCountTable[nMaxCount]<<"个";
}

用c解决 A 智能提示 分数 100 作者 朱允刚 单位 吉林大学 百度、谷歌等搜索引擎,以及输入法等各种软件通常包含这样一个功能,当用户在输入框输入信息时,软件会提供一种“智能提示”。对用户所输入的信息,自动补全、列可能的完整单词,提示给用户,以方便用户输入,提升用户体验。 pic.jpg 这个功能是如何实现的呢?一种典型的实现方式是,在系统后台维护一个字典,当用户输入字符时,在字典中查找以用户当前输入的字符串为前缀的全部单词,选取其中历史使用率最高的若干单词作为候选词,建议给用户。 请编写程序实现上述功能。 备注:这里约定一个字符串不能称为自己的前缀。若用户输入的字符串恰好是字典中的一个单词,则该单词不必向用户建议。 输入格式: 输入第一行为3个正整数n、m、k。n为字典中单词个数。m为用户查询数,即用户输入的单词个数。对于用户输入的每个字符串,程序需要返回字典中以该字符串为前缀的、历史使用频率最高的k个单词。接下来n行,表示字典信息,每行为1个整数和1个字符串,整数表示单词的历史使用频率字符串表示单词,请注意,单词包含的每个字符为a-z的小写字母或0-9的数字,即数字也可能构成字典中的单词。字典内的单词并非按使用频率有序存放。接下来m行,表示用户的查询,每行为一个a-z的小写字母或0-9的数字组成字符串,表示用户的查询。另外请注意,由于字典往往是在用户历史数据的基础上加工而得,所以字典中可能现重复单词,若某个单词在字典中现多次,则其历史使用频率最高者为准。 (n ≤ 10000, m ≤ 20000, k ≤ 10, 每个单词度不超过20,单词历史使用频率小于2 31 ) 输格式: 对于用户输入的每个字符串,按使用频率降序输字典中以该字符串为前缀的、历史使用频率最高的k个单词,每个占1行。若多个单词历史使用频率相同,则字典序靠前的单词排名靠前。若单词中包含数字,则字典序以ACSII码判定,即0<1<2<…<9<a<b<c<…<z。若字典中满足输条件的单词个数大于0小于k,则有多少就输多少个。若字典中没有满足输条件的单词,则输“no suggestion”。针对用户每个查询所输的信息,用空行间隔。
最新发布
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值