📌  相关文章
📜  给定字符串中第 K 个最频繁的字符

📅  最后修改于: 2021-09-06 06:33:16             🧑  作者: Mango

给定一个字符串str和一个整数K ,任务是找到字符串第 K 个最频繁的字符。如果有多个字符可以作为第 K 个最频繁的字符,则打印其中的任何一个。

例子:

方法

  • 这个想法是在 Hashmap 中使用字符作为键并将它们的出现存储在字符串。
  • 对 Hashmap 进行排序并找到第 K 个字符。

下面是上述方法的实现。

C++
// C++ program to find kth most frequent
// character in a string
#include 
using namespace std;
  
// Used for sorting by frequency.
bool sortByVal(const pair& a,
               const pair& b)
{
    return a.second > b.second;
}
  
// function to sort elements by frequency
char sortByFreq(string str, int k)
{
    // Store frequencies of characters
    unordered_map m;
    for (int i = 0; i < str.length(); ++i)
        m[str[i]]++;
  
    // Copy map to vector
    vector > v;
    copy(m.begin(), m.end(), back_inserter(v));
  
    // Sort the element of array by frequency
    sort(v.begin(), v.end(), sortByVal);
  
    // Find k-th most frequent item. Please note
    // that we need to consider only distinct
    int count = 0;
    for (int i = 0; i < v.size(); i++) {
  
        // Increment count only if frequency is
        // not same as previous
        if (i == 0 || v[i].second != v[i - 1].second)
            count++;
  
        if (count == k)
            return v[i].first;
    }
  
    return -1;
}
  
// Driver program
int main()
{
    string str = "geeksforgeeks";
    int k = 3;
    cout << sortByFreq(str, k);
    return 0;
}


输出:
r

时间复杂度: O(NlogN)请注意,这是时间复杂度的上限。如果我们将字母大小视为常数(例如小写英文字母大小为 26),我们可以说时间复杂度为 O(N)。矢量大小永远不会超过字母表大小。
辅助空间: O(N)

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live