Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
C++ program to find Second most repeated word in a sequence
We are given an array of words, and we need to find the word whose frequency is the second largest in the array.
Let?s assume some simple input and output scenarios
Let?s assume we are having an array which consists of elements like ["point," "world," "articles," "articles," "articles," "world," "world," "world," "point"].
The frequency of words are ?
"point": 2 "world": 4 "articles": 3 // This will be the second most repeated word in the array.
So the second most repeated word is "articles," and our output is "articles."
Let?s consider another scenario, Where there are group of similar words in an array, for example ["abc", "abc", "abc", "bab", "bab", "cat"]. The second most repeated word in sequence will be "bab".
"abc" = 3 "bab" = 2 // This will be the second most repeated word in the array. "cat" = 1
We can hash and find the frequencies of each word in the given array of words and then return the second greater. In C++, we can use the unordered_map data structure.
Algorithm
The following are steps to be followed to perform the task
Implement a hash table.
The frequency of each string in the vector should be stored in hash table.
Traverse the hash table after storing each string in hash table to find the string having second highest frequency.
Then, print the string as output
Example
The C++ implementation to find the second most frequent word in a list is as follows ?
<div class="execute"></div><div class="code-mirror language-cpp" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><iostream></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><vector></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><unordered_map></span></span>
<span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span>
string <span class="token function">solve</span><span class="token punctuation">(</span>vector<span class="token operator"><</span>string<span class="token operator">></span> words<span class="token punctuation">)</span> <span class="token punctuation">{</span>
unordered_map<span class="token operator"><</span>string<span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token operator">></span> hash<span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> word<span class="token operator">:</span> words<span class="token punctuation">)</span> <span class="token punctuation">{</span>
hash<span class="token punctuation">[</span>word<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">int</span> first_max <span class="token operator">=</span> INT32_MIN<span class="token punctuation">,</span> sec_max <span class="token operator">=</span> INT32_MIN<span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> it<span class="token operator">:</span> hash<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>it<span class="token punctuation">.</span>second <span class="token operator">></span> first_max<span class="token punctuation">)</span> <span class="token punctuation">{</span>
sec_max <span class="token operator">=</span> first_max<span class="token punctuation">;</span>
first_max <span class="token operator">=</span> it<span class="token punctuation">.</span>second<span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>it<span class="token punctuation">.</span>second <span class="token operator">></span> sec_max <span class="token operator">&&</span> it<span class="token punctuation">.</span>second <span class="token operator">!=</span> first_max<span class="token punctuation">)</span> <span class="token punctuation">{</span>
sec_max <span class="token operator">=</span> it<span class="token punctuation">.</span>second<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> it<span class="token operator">:</span> hash<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>it<span class="token punctuation">.</span>second <span class="token operator">==</span> sec_max<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> it<span class="token punctuation">.</span>first<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token string">""</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
vector<span class="token operator"><</span>string<span class="token operator">></span> words <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token string">"point"</span><span class="token punctuation">,</span> <span class="token string">"world"</span><span class="token punctuation">,</span> <span class="token string">"articles"</span><span class="token punctuation">,</span> <span class="token string">"articles"</span><span class="token punctuation">,</span> <span class="token string">"articles"</span><span class="token punctuation">,</span> <span class="token string">"world"</span><span class="token punctuation">,</span> <span class="token string">"world"</span><span class="token punctuation">,</span> <span class="token string">"world"</span><span class="token punctuation">,</span> <span class="token string">"point"</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>
cout <span class="token operator"><<</span> <span class="token function">solve</span><span class="token punctuation">(</span>words<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>
Output
"articles"
Conclusion
We can also use maps in C++, but it is useless as we don?t want our words to be sorted lexicographically when hashed. Using the map will also be expensive as the insert operation takes O(log(n)) while in unordered_map, it takes O(1). For bigger input, though, we have to write our custom hash function to avoid conflicts and keep the time complexity O(1) only.
