PTA1071

题意

输出给定字符串出现最多的字符串(小写输出)和出现次数。

所求字符串要求:字符中可以含有A-Z、0-9。

比如说题目给出的Can1,我们可以转换成can1,can1就算一个字符串整体,而不是单独的取出can1里面的can来加一。

思路

先把大写字母全部转换成小写,然后再用map存储单词个数即可,简单用法。

注意

  1. 有个特殊的数据要判断,不写的话牛客可以AC,但是PTA最后一组数据会报错。

    特例:给出的字符串最后一个字符如果不是'0'-'9'、'a'-'z'的话,单独算一个字符串判断。

  2. for循环的时候注意判断空字符串(空格)出现的情况

  3. 也可以用sstreamstring来处理一下,都可以的

AC代码

#include<iostream>
#include<string.h>
#include<cmath>
#include<map>

using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;

map<string,int> mp;

int main()
{
    string s;
    getline(cin,s);
    int l=s.length();
    for(int i=0;i<l;i++)
    {
        if(s[i]>='A'&&s[i]<='Z')
            s[i]+=32;
    }
    string ss;
    for(int i=0;i<l;i++)
    {
        if((s[i]>='0'&&s[i]<='9')||(s[i]>='a'&&s[i]<='z'))
            ss+=s[i];
        else if(ss!="")
            mp[ss]++,ss="";
    }
    ss=s[l-1];  // 最后一个字符特判
    if(!(s[l-1]>='0'&&s[l-1]<='9')||!(s[l-1]>='a'&&s[l-1]<='z'))
        mp[ss]++;
    string ans;
    int ma=0;
    for(auto&i:mp)
    {
        if(i.second>ma)
            ma=i.second,ans=i.first;
    }
    cout<<ans<<" "<<ma<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/OFSHK/p/14495521.html