📜  序列中重复次数第二多的单词

📅  最后修改于: 2021-10-27 08:04:16             🧑  作者: Mango

给定一个字符串序列,任务是找出给定序列中第二大重复(或频繁)的字符串。(考虑到没有两个单词是第二大重复的,总会有一个单词)。

例子:

Input : {"aaa", "bbb", "ccc", "bbb", 
         "aaa", "aaa"}
Output : bbb

Input : {"geeks", "for", "geeks", "for", 
          "geeks", "aaa"}
Output : for

询问:亚马逊

  1. 将所有单词存储在一个映射中,它们的出现以单词为键,出现的次数为值。
  2. 找到地图中第二大的值。
  3. 再次遍历地图,返回出现值等于第二个最大值的单词。
C++
// C++ program to find out the second
// most repeated word
#include 
using namespace std;
 
// Function to find the word
string secMostRepeated(vector seq)
{
 
    // Store all the words with its occurrence
    unordered_map occ;
    for (int i = 0; i < seq.size(); i++)
        occ[seq[i]]++;
 
    // find the second largest occurrence
    int first_max = INT_MIN, sec_max = INT_MIN;
    for (auto it = occ.begin(); it != occ.end(); it++) {
        if (it->second > first_max) {
            sec_max = first_max;
            first_max = it->second;
        }
 
        else if (it->second > sec_max &&
                 it->second != first_max)
            sec_max = it->second;
    }
 
    // Return string with occurrence equals
    // to sec_max
    for (auto it = occ.begin(); it != occ.end(); it++)
        if (it->second == sec_max)
            return it->first;
}
 
// Driver program
int main()
{
    vector seq = { "ccc", "aaa", "ccc",
                          "ddd", "aaa", "aaa" };
    cout << secMostRepeated(seq);
    return 0;
}


Java
// Java program to find out the second
// most repeated word
 
import java.util.*;
 
class GFG
{
    // Method to find the word
    static String secMostRepeated(Vector seq)
    {
        // Store all the words with its occurrence
        HashMap occ = new HashMap(seq.size()){
            @Override
            public Integer get(Object key) {
                 return containsKey(key) ? super.get(key) : 0;
            }
        };
        
        for (int i = 0; i < seq.size(); i++)
            occ.put(seq.get(i), occ.get(seq.get(i))+1);
      
        // find the second largest occurrence
       int first_max = Integer.MIN_VALUE, sec_max = Integer.MIN_VALUE;
         
       Iterator> itr = occ.entrySet().iterator();
       while (itr.hasNext())
       {
           Map.Entry entry = itr.next();
           int v = entry.getValue();
           if( v > first_max) {
                sec_max = first_max;
                first_max = v;
            }
      
            else if (v > sec_max &&
                     v != first_max)
                sec_max = v;
       }
        
       // Return string with occurrence equals
        // to sec_max
       itr = occ.entrySet().iterator();
       while (itr.hasNext())
       {
           Map.Entry entry = itr.next();
           int v = entry.getValue();
           if (v == sec_max)
                return entry.getKey();
       }
        
       return null;
    }
     
    // Driver method
    public static void main(String[] args)
    {
        String arr[] = { "ccc", "aaa", "ccc",
                         "ddd", "aaa", "aaa" };
        List seq =  Arrays.asList(arr);
         
        System.out.println(secMostRepeated(new Vector<>(seq)));
    }   
}
// This program is contributed by Gaurav Miglani


Python3
# Python3 program to find out the second
# most repeated word
 
# Function to find the word
def secMostRepeated(seq):
     
    # Store all the words with its occurrence
    occ = {}
    for i in range(len(seq)):
        occ[seq[i]] = occ.get(seq[i], 0) + 1
 
    # Find the second largest occurrence
    first_max = -10**8
    sec_max = -10**8
 
    for it in occ:
        if (occ[it] > first_max):
            sec_max = first_max
            first_max = occ[it]
             
        elif (occ[it] > sec_max and
              occ[it] != first_max):
            sec_max = occ[it]
 
    # Return with occurrence equals
    # to sec_max
    for it in occ:
        if (occ[it] == sec_max):
            return it
 
# Driver code
if __name__ == '__main__':
     
    seq = [ "ccc", "aaa", "ccc",
            "ddd", "aaa", "aaa" ]
    print(secMostRepeated(seq))
 
# This code is contributed by mohit kumar 29


C#
// C# program to find out the second
// most repeated word
using System;
using System.Collections.Generic;
 
class GFG
{
    // Method to find the word
    static String secMostRepeated(List seq)
    {
        // Store all the words with its occurrence
        Dictionary occ =
        new Dictionary();
                 
        for (int i = 0; i < seq.Count; i++)
            if(occ.ContainsKey(seq[i]))
                occ[seq[i]] = occ[seq[i]] + 1;
            else
                occ.Add(seq[i], 1);
     
        // find the second largest occurrence
        int first_max = int.MinValue,
            sec_max = int.MinValue;
         
        foreach(KeyValuePair entry in occ)
        {
            int v = entry.Value;
            if( v > first_max)
            {
                sec_max = first_max;
                first_max = v;
            }
         
            else if (v > sec_max &&
                    v != first_max)
                sec_max = v;
        }
         
        // Return string with occurrence equals
        // to sec_max
        foreach(KeyValuePair entry in occ)
        {
            int v = entry.Value;
            if (v == sec_max)
                return entry.Key;
        }
             
        return null;
    }
     
    // Driver method
    public static void Main(String[] args)
    {
        String []arr = { "ccc", "aaa", "ccc",
                        "ddd", "aaa", "aaa" };
        List seq = new List(arr);
         
        Console.WriteLine(secMostRepeated(seq));
    }
}
 
// This code is contributed by Rajput-Ji


输出:

ccc

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程