题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805398257647616
参考:
- 大小写转换:https://blog.csdn.net/Zidane_2014/article/details/39157765
- 测试点4:https://blog.csdn.net/qq_43749739/article/details/104008750
思路
差不多是完全自己写的,可以再写个函数简化一下,不过懒得写了。。
思路差不多就是map + twopointer,这个逻辑就是用twopointer分割单词,map记录,最后求个最大
最后测试点4出了点问题,因为如果最后一个是有效字符就会出问题,b到达不了tempstr的size长度就退出循环了
代码
#include<map>#include<algorithm>#include<string>#include<cctype>#include<iostream>using namespace std;map<string, int> m;bool judge(char c){if((c <= 'z' && c >= 'a')||(c <= '9' && c >= '0')) return true;else return false;}int main(){string input, ans;bool flag = true;getline(cin, input);int a = 0, b = 0, max = -1;while(b < input.size()){if(isupper(input[b])) input[b] = tolower(input[b]);if(judge(input[b])){if(flag){//如果这是单词的第一个字母,令a = ba = b;flag = false;}b++;if(b == input.size()){//最后特判一次if(m.find(input.substr(a, b - a)) == m.end()){//如果找不到m[input.substr(a, b - a)] = 1;} else {m[input.substr(a, b - a)]++;}if(m[input.substr(a, b - a)] > max){ans = input.substr(a, b - a);max = m[input.substr(a, b - a)];}}} else {if(flag){b++;continue;}//printf("a = %d, b = %d\n", a, b);if(m.find(input.substr(a, b - a)) == m.end()){//如果找不到m[input.substr(a, b - a)] = 1;} else {m[input.substr(a, b - a)]++;}if(m[input.substr(a, b - a)] > max){ans = input.substr(a, b - a);max = m[input.substr(a, b - a)];}flag = true;}}cout<<ans<<" "<<max;}
