题解 | #简单错误记录#

#include <bits/stdc++.h>

using namespace std;
//只用输出最后出现的八条错误记录——考虑队列,超过八条时弹出 (双端队列,从后端进,从前端出)
//对相同的错误记录只记录一条,但是错误计数增加——考虑哈希表,键为错误记录,值为错误计数


int main(){
    string str = "";
    unordered_map<string, int> mp;
    deque<string> dq;
    
    while(getline(cin, str)){
        str = str.substr(str.find_last_of('\\') + 1); 
        //cout << str << endl; //cqzlyaszjvlsjmkwoqijggmybr 645
        int spacePos = str.find_last_of(' '); //从0开始的第26个索引处是空格
        //cout << spacePos << endl; //26
        if(spacePos > 16){
            str = str.substr(spacePos - 16);
            //cout << str << endl; //lsjmkwoqijggmybr 645
        }
        
        if(mp.find(str) == mp.end()){
            dq.push_back(str);
        }
        mp[str]++;
        
        //cout << dq.front() << endl; //lsjmkwoqijggmybr 645
        if(dq.size() > 8) dq.pop_front(); //超过八条则 从前面推出
    }
    
    for(auto s : dq){
        cout << s << " " << mp[s] << endl;
    }
    
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务