map的oj题

第一题

. - 力扣(LeetCode)

第二题

单词识别_牛客题霸_牛客网

解题思路:

        1,将数据放入set或者map中去重更新次数, 即利用set和map的[ ]++   

        2. 将数据放到vector 进行排序 ,还应该利用仿函数写出 Compare() ,因为sort()是不稳定排序,且要的是降序

第一题答案

class Solution {
public:
    struct Compare
    {
        bool operator()(const pair<string ,int>& x ,const pair<string ,int>& y)
        {
            return x.second > y.second|| (x.second == y.second && x.first< y.first);
        }
    }; 

    vector<string> topKFrequent(vector<string>& words, int k) 
    {
        //map插入时已经将string按照字典序排好了
        map<string,int> CountMap;

        for(const auto& e:words)
        {
           CountMap[e]++;
        }

        vector<pair<string ,int>> comparev;
        for(const auto& e: CountMap)
        {
            comparev.push_back(e);
        }
        //排降序,但是sort是快排+堆排 ,sort不稳定。可以直接用stable_sort
        //stable_sort(comparev.begin() ,comparev.end(),Compare());
        sort(comparev.begin() ,comparev.end(),Compare());

        vector<string> ret;
        for(int i=0 ;i<k; ++i)
        {
            ret.push_back(comparev[i].first);
        }
        return ret;
        
    }
};

第二题答案

#include <iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;

struct Compare {
    bool operator()(const pair<string, int>& p1, const pair<string, int>& p2) {
        char first1 = p1.first[0];
        char first2 = p2.first[0];
        return p1.second > p2.second || (p1.second == p2.second && first1 < first2);
    }
};
int main() 
{
    map<string, int> countm;
    string s;
    getline(cin, s);
    vector<pair<string, int>> v;

    for (int i = 0, j = 0 ; i < s.size() ; i++) {
        if (s[i] == ' ' || s[i] == '.') {
            string s1 = s.substr(j, i - j);
            if (isupper(s1[0])) {
                s1[0] = tolower(s1[0]); //重要
            }
            v.push_back({s1, 0});
            j = i + 1;
        }
    }

    for (auto e : v) 
    {
        countm[e.first]++;
    }

    vector<pair<string, int>> retv;
    for(const auto& e:countm)
    {
        retv.push_back(e);
    }
    
    sort(retv.begin() , retv.end(), Compare());

    for (const auto& e : retv) {
        cout << e.first << ":" << e.second << endl;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_73751295/article/details/143375737