class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * return topK string
     * @param strings string字符串vector strings
     * @param k int整型 the k
     * @return string字符串vector<vector<>>
     */
    vector<vector<string> > topKstrings(vector<string>& strings, int k) {
        // write code here
        vector<vector<string>> res;
        if (strings.empty() || k == 0) return res;

        unordered_map<string, int> mp;
        for (auto& s : strings) {
            mp[s]++;
        }

        vector<pair<string, int>> v(mp.begin(), mp.end());
        sort(v.begin(), v.end(), [](auto & a, auto & b) {
            if (a.second != b.second) return a.second > b.second; // 次数降序
            return a.first < b.first; // 次数相同按字典序
        });

        for (int i = 0; i < k && i < v.size(); i++) {
            res.push_back({v[i].first, to_string(v[i].second)});
        }
        return res;
    }
};