Second most repeated word in a sequence - GeeksforGeeks

04 Apr, 2022
Given a sequence of strings, the task is to find out the second most repeated (or frequent) string in the given sequence.(Considering no two words are the second most repeated, there will be always a single word).
Examples: 
Input : {"aaa", "bbb", "ccc", "bbb", 
         "aaa", "aaa"}
Output : bbb

Input : {"geeks", "for", "geeks", "for", 
          "geeks", "aaa"}
Output : for
Asked in : Amazon
C++
Java
Python3
C#
Javascript
// C++ program to find out the second// most repeated word#include <bits/stdc++.h>using namespace std; // Function to find the wordstring secMostRepeated(vector<string> seq){     // Store all the words with its occurrence    unordered_map<string, int> 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 programint main(){    vector<string> seq = { "ccc", "aaa", "ccc",                          "ddd", "aaa", "aaa" };    cout << secMostRepeated(seq);    return 0;}
// Java program to find out the second// most repeated word import java.util.*; class GFG{    // Method to find the word    static String secMostRepeated(Vector<String> seq)    {        // Store all the words with its occurrence        HashMap<String, Integer> occ = new HashMap<String,Integer>(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<Map.Entry<String, Integer>> itr = occ.entrySet().iterator();       while (itr.hasNext())       {           Map.Entry<String, Integer> 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<String, Integer> 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<String> seq =  Arrays.asList(arr);                 System.out.println(secMostRepeated(new Vector<>(seq)));    }   }// This program is contributed by Gaurav Miglani
# Python3 program to find out the second# most repeated word # Function to find the worddef 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 codeif __name__ == '__main__':         seq = [ "ccc", "aaa", "ccc",            "ddd", "aaa", "aaa" ]    print(secMostRepeated(seq)) # This code is contributed by mohit kumar 29
// C# program to find out the second// most repeated wordusing System;using System.Collections.Generic; class GFG{    // Method to find the word    static String secMostRepeated(List<String> seq)    {        // Store all the words with its occurrence        Dictionary<String, int> occ =        new Dictionary<String, int>();                         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<String, int> 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<String, int> 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<String> seq = new List<String>(arr);                 Console.WriteLine(secMostRepeated(seq));    }} // This code is contributed by Rajput-Ji
<script> // JavaScript program to find out the second// most repeated word // Function to find the wordfunction secMostRepeated(seq){     // Store all the words with its occurrence    let occ = new Map();    for (let i = 0; i < seq.length; i++)    {        if(occ.has(seq[i])){            occ.set(seq[i], occ.get(seq[i])+1);        }        else occ.set(seq[i], 1);    }     // find the second largest occurrence    let first_max = Number.MIN_VALUE, sec_max = Number.MIN_VALUE;    for (let [key,value] of occ) {        if (value > first_max) {            sec_max = first_max;            first_max = value;        }         else if (value > sec_max && value != first_max)            sec_max = value;    }     // Return string with occurrence equals    // to sec_max    for (let [key,value] of occ)        if (value == sec_max)            return key;} // Driver programlet seq = [ "ccc", "aaa", "ccc", "ddd", "aaa", "aaa" ];document.write(secMostRepeated(seq)); // This code is contributed by shinjanpatra</script>
Output: 
ccc
Reference: https://www.careercup.com/question?id=5748104113422336This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
Rajput-Ji
mohit kumar 29
shinjanpatra
simmytarika5
gyaneshsharma09
Amazon
Goldman Sachs
Hash
Strings
Amazon
Goldman Sachs
Hash
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Hashing | Set 2 (Separate Chaining)
Counting frequencies of array elements
Most frequent element in an array
Sort string of characters
Return maximum occurring character in an input string
Reverse a string in Java
Write a program to reverse an array or string
Longest Common Subsequence | DP-4
C++ Data Types
Write a program to print all permutations of a given string