Problem Statement:
You are given a strings, your task is to find the second most repeated string in the given sequence.
Example
Input : {"aaa", "bbb", "ccc", "bbb", "aaa", "aaa"} Output : bbb
Solution
The solution is very simple.
Store all the words in a map and the count of the times that word is repeated.
Now we get the second largest value in Map.
Solution in C++
#include <vector> #include <algorithm> //visit www.ProDeveloperTutorial.com for 450+ solved questions #include <iostream> #include <string> #include <unordered_map> using namespace std; string get_sec_most_repeated_word(vector<string> seq) { unordered_map<string, int> word_with_count; for (int i = 0; i < seq.size(); i++) word_with_count[seq[i]]++; // find the second largest occurrence int first_max = INT_MIN; int sec_max = INT_MIN; for (auto it = word_with_count.begin(); it != word_with_count.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 the second max for (auto it = word_with_count.begin(); it != word_with_count.end(); it++) if (it->second == sec_max) return it->first; } int main() { vector<string> seq = { "bbb", "aaa", "bbb", "ddd", "aaa", "aaa" }; cout << "The second most repeated word in a sequence = "<<get_sec_most_repeated_word(seq); return 0; }
Output:
The second most repeated word in a sequence = bbb