前言

传送门

正文


参考题解

#include<iostream>
#include<algorithm>
#include<string>
#include<map> 
#include<cmath>
using namespace std;
/* 题意:求一段话中最常出现的单词及其次数,若有多个相同的单词满足情况,则输出字典序最小的 思路:根据题意可以看出需要建立起string与int型的映射,又考虑到字典序最小的排序,故 可以使用map<string,int>来存放每个单词出现的次数。 注意点: map的遍历、双指针分割获取每个单词 */
string str;
map<string,int> mp;
map<char,bool> flag;
int main(){
	getline(cin,str);
	int len=str.size(),cnt=-1;
	for(int i=0;i<len;i++){//因为题意说大小写不敏感,故大写全部转为小写 
		if(str[i]>='A'&&str[i]<='Z')
		str[i]+=32;
	}
	for(int i='a';i<='z';i++)flag[i]=true;
	for(int i='0';i<='9';i++)flag[i]=true;
//基本模板双指针获取每个单词 
	for(int i=0,j;i<len;){
		if(!flag[str[i]]){//遇到非a~z,0~9之间的字符,直接跳过,进入下一个字符 
			i++;
			continue;
		}
		j=i+1;
		while(j<len&&flag[str[j]])j++;
		int num=j-i;
		string temp=str.substr(i,num);
		mp[temp]++; 
		i=j+1;
	}
	
	string maxStr;
	//遍历map 
	for(auto it=mp.begin();it!=mp.end();it++){
		if(it->second>cnt){
			cnt=it->second;
			maxStr=it->first;
		}
	}
	cout<<maxStr<<" "<<mp[maxStr]<<endl;
	return 0;
}