题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805398257647616
参考:

  1. 大小写转换:https://blog.csdn.net/Zidane_2014/article/details/39157765
  2. 测试点4:https://blog.csdn.net/qq_43749739/article/details/104008750

思路

差不多是完全自己写的,可以再写个函数简化一下,不过懒得写了。。
思路差不多就是map + twopointer,这个逻辑就是用twopointer分割单词,map记录,最后求个最大
最后测试点4出了点问题,因为如果最后一个是有效字符就会出问题,b到达不了tempstr的size长度就退出循环了

代码

  1. #include<map>
  2. #include<algorithm>
  3. #include<string>
  4. #include<cctype>
  5. #include<iostream>
  6. using namespace std;
  7. map<string, int> m;
  8. bool judge(char c){
  9. if((c <= 'z' && c >= 'a')||(c <= '9' && c >= '0')) return true;
  10. else return false;
  11. }
  12. int main(){
  13. string input, ans;
  14. bool flag = true;
  15. getline(cin, input);
  16. int a = 0, b = 0, max = -1;
  17. while(b < input.size()){
  18. if(isupper(input[b])) input[b] = tolower(input[b]);
  19. if(judge(input[b])){
  20. if(flag){//如果这是单词的第一个字母,令a = b
  21. a = b;
  22. flag = false;
  23. }
  24. b++;
  25. if(b == input.size()){//最后特判一次
  26. if(m.find(input.substr(a, b - a)) == m.end()){//如果找不到
  27. m[input.substr(a, b - a)] = 1;
  28. } else {
  29. m[input.substr(a, b - a)]++;
  30. }
  31. if(m[input.substr(a, b - a)] > max){
  32. ans = input.substr(a, b - a);
  33. max = m[input.substr(a, b - a)];
  34. }
  35. }
  36. } else {
  37. if(flag){
  38. b++;
  39. continue;
  40. }
  41. //printf("a = %d, b = %d\n", a, b);
  42. if(m.find(input.substr(a, b - a)) == m.end()){//如果找不到
  43. m[input.substr(a, b - a)] = 1;
  44. } else {
  45. m[input.substr(a, b - a)]++;
  46. }
  47. if(m[input.substr(a, b - a)] > max){
  48. ans = input.substr(a, b - a);
  49. max = m[input.substr(a, b - a)];
  50. }
  51. flag = true;
  52. }
  53. }
  54. cout<<ans<<" "<<max;
  55. }