入门oj 5499: 讲话模式
Description
每个人说话都有口头禅,现给出一个字符串,请求出其中出现次数最多的单词(不区分大小写)。
Input
输入一行,长度小于等于1048576的字符串
输入至少包含一个字母或数字
输入至少包含一个字母或数字
Output
输出一行,为出现次数最多的单词及出现的次数,用空格分开
如果结果不唯一,则输出字典序最小的那个,这个单词必须以小写的形式输出。
如果结果不唯一,则输出字典序最小的那个,这个单词必须以小写的形式输出。
Sample Input
Can a can can a can? It can !
Sample Output
can 5
HINT
1简单的一个map题
2这个题的读入比较恶心,需要转大小写,还要判空格和标点,具体方法如代码
#include<bits/stdc++.h> using namespace std; int f[1000001],ans; char s[1048579]; map<string,int> a; map<string,int>::iterator flag;//迭代器 int main(){ gets(s); int len=strlen(s); string q=""; for(int i=0;i<len;i++){ if(s[i]==' ') { a[q]++; q=""; continue; }//判空格,如果是空格那么就表示一个单词结束了,可以把这个单词打入map if(s[i]>='A'&&s[i]<='Z') s[i]+=32;//大写转小写 if(s[i]>='a'&&s[i]<='z') q+=s[i]//如果这个字符是一个字母,就把他放入q串 ; } for(map<string,int>::iterator i=a.begin();i!=a.end();i++) //迭代器 if(ans<(*i).second) flag=i,ans=(*flag).second; //算出最大值 cout<<(*flag).first<<" "<<(*flag).second; }
you are both faker