「已注销」 2022-05-13 09:32 采纳率: 81.5%
浏览 101
已结题

老是超时有办法解决,或者更简单的方法

输入
i have brought #peace #freedom #justice and #security to my new empire
输出
4
#freedom 1
#justice 1
#peace 1
#security 1
代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using std::cin;
using std::cout;
using std::vector;
using std::string;
using std::find;
class Solution{
public:
    static vector<string> tags(vector<string> inputs){
        vector<string> tag;
        for(string x:inputs){
            if(x[0]=='#'&&x.size()>1&&x.find('#',1)==x.npos){
                tag.push_back(x);
            }
        }
        return tag;
    }
    static int tag_num(vector<string>tag){
        int num=0;
        int flag=0;
        for(string x:tag){
            if(count(tag.begin()+flag, tag.end(), x)<=1){
                num++;
            }
            flag++;
        }
        return num;
    }
    static int single(string x,vector<string>tag){
        int num=0;
        for(string y:tag){
            if(x.compare(y)==0){
                num++;
            }
        }
        return num;
    }
};
int main(int argc, char const *argv[])
{
    string str;
    vector<string> orn;
   
    while(cin>>str){
        orn.push_back(str);
    }
    vector<string> tags(Solution::tags(orn));
    cout<<Solution::tag_num(tags)<<std::endl;
    vector<string> tags_new(tags);
    sort( tags_new.begin(), tags_new.end() );
    tags_new.erase( unique( tags_new.begin(), tags_new.end() ), tags_new.end() );
    for(auto x:tags_new){
        cout<<x<<" "<<Solution::single(x,tags)<<std::endl;
    }
    return 0;
}


题目如下:

img

  • 写回答

4条回答 默认 最新

  • 丨秋水丨 2022-05-13 10:09
    关注

    img

    #include<iostream>
    #include<unordered_map>
    #include<string>
    #include<sstream>
    #include<algorithm>
    using namespace std;
    int main()
    {
        string line;
        unordered_map<string, int> tags;
        getline(cin, line);
        int i = 0;
        string word = "";
        stringstream stream(line);
        while (stream >> word)
            if (word.size() > 1 && word[0] == '#' && count(word.begin(), word.end(), '#') == 1)tags[word]++;
        cout << tags.size() << endl;
        for (const auto tag : tags)
            cout << tag.first << " " << tag.second << endl;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月21日
  • 已采纳回答 5月13日
  • 赞助了问题酬金5元 5月13日
  • 创建了问题 5月13日

悬赏问题

  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA