PAT A1071 Speech Patterns (25分)

前言

传送门

正文


参考题解

#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;
}
全部评论

相关推荐

05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求职打法:注意把武大标粗标大 本地你俩不是乱杀
点赞 评论 收藏
分享
野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务