Given an array of n words. Some words are repeated twice, we need to count such words.
Examples:
Input : s[] = {"hate", "love", "peace", "love", "peace", "hate", "love", "peace", "love", "peace"}; Output : 1 There is only one word "hate" that appears twice Input : s[] = {"Om", "Om", "Shankar", "Tripathi", "Tom", "Jerry", "Jerry"}; Output : 2 There are two words "Om" and "Jerry" that appear twice.
Source: Amazon Interview
Below is the implementation:
C++
// C++ program to count all words with count // exactly 2. #include <bits/stdc++.h> using namespace std;
// Returns count of words with frequency // exactly 2. int countWords(string str[], int n)
{ unordered_map<string, int > m;
for ( int i = 0; i < n; i++)
m[str[i]] += 1;
int res = 0;
for ( auto it = m.begin(); it != m.end(); it++)
if ((it->second == 2))
res++;
return res;
} // Driver code int main()
{ string s[] = { "hate" , "love" , "peace" , "love" ,
"peace" , "hate" , "love" , "peace" ,
"love" , "peace" };
int n = sizeof (s) / sizeof (s[0]);
cout << countWords(s, n);
return 0;
} |
Java
// Java program to count all words with count // exactly 2. import java.util.HashMap;
import java.util.Map;
public class GFG {
// Returns count of words with frequency
// exactly 2.
static int countWords(String str[], int n)
{
// map to store count of each word
HashMap<String, Integer> m = new HashMap<>();
for ( int i = 0 ; i < n; i++){
if (m.containsKey(str[i])){
int get = m.get(str[i]);
m.put(str[i], get + 1 );
}
else {
m.put(str[i], 1 );
}
}
int res = 0 ;
for (Map.Entry<String, Integer> it: m.entrySet()){
if (it.getValue() == 2 )
res++;
}
return res;
}
// Driver code
public static void main(String args[])
{
String s[] = { "hate" , "love" , "peace" , "love" ,
"peace" , "hate" , "love" , "peace" ,
"love" , "peace" };
int n = s.length;
System.out.println( countWords(s, n));
}
} // This code is contributed by Sumit Ghosh |
Python3
# Python program to count all # words with count # exactly 2. # Returns count of words with frequency # exactly 2. def countWords(stri, n):
m = dict ()
for i in range (n):
m[stri[i]] = m.get(stri[i], 0 ) + 1
res = 0
for i in m.values():
if i = = 2 :
res + = 1
return res
# Driver code s = [ "hate" , "love" , "peace" , "love" ,
"peace" , "hate" , "love" , "peace" ,
"love" , "peace" ]
n = len (s)
print (countWords(s, n))
# This code is contributed # by Shubham Rana |
C#
// C# program to count all words with count // exactly 2. using System;
using System.Collections.Generic;
class GFG
{ // Returns count of words with frequency
// exactly 2.
static int countWords(String []str, int n)
{
// map to store count of each word
Dictionary<String, int > m = new Dictionary<String, int >();
for ( int i = 0; i < n; i++)
{
if (m.ContainsKey(str[i]))
{
int get = m[str[i]];
m.Remove(str[i]);
m.Add(str[i], get + 1);
}
else
{
m.Add(str[i], 1);
}
}
int res = 0;
foreach (KeyValuePair<String, int > it in m)
{
if (it.Value == 2)
res++;
}
return res;
}
// Driver code
public static void Main(String []args)
{
String []a = { "hate" , "love" , "peace" , "love" ,
"peace" , "hate" , "love" , "peace" ,
"love" , "peace" };
int n = a.Length;
Console.WriteLine( countWords(a, n));
}
} // This code is contributed by Rajput-Ji |
Javascript
<script> // Javascript program to count all words with count // exactly 2. // Returns count of words with frequency // exactly 2. function countWords(str, n)
{ var m = new Map();
for ( var i = 0; i < n; i++)
{
if (m.has(str[i]))
m.set(str[i], m.get(str[i])+1)
else
m.set(str[i], 1)
}
var res = 0;
m.forEach((value, key) => {
if ((value == 2))
res++;
});
return res;
} // Driver code var s = [ "hate" , "love" , "peace" , "love" ,
"peace" , "hate" , "love" , "peace" ,
"love" , "peace" ];
var n = s.length;
document.write( countWords(s, n)); </script> |
Output
1
Time Complexity : O(N)
Auxiliary Space: O(N)
Method 2: Using Built-in Python functions:
- Count the frequencies of every word using the Counter function
- Traverse in frequency dictionary
- Check which word has frequency 2. If so, increase the count
- Print Count
Below is the implementation:
C++
// C++ program for the above approach #include <iostream> #include <unordered_map> #include <vector> using namespace std;
int countWords(vector<string> s, int n)
{ // Calculating frequency using unordered_map
unordered_map<string, int > freq;
for ( int i = 0; i < n; i++) {
freq[s[i]]++;
}
int count = 0;
// Traversing in freq dictionary
for ( auto & it : freq) {
if (it.second == 2) {
count++;
}
}
return count;
} // Driver code int main()
{ vector<string> s
= { "hate" , "love" , "peace" , "love" , "peace" ,
"hate" , "love" , "peace" , "love" , "peace" };
int n = s.size();
cout << countWords(s, n) << endl;
return 0;
} // This code is contributed by prince |
Java
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
public class Main {
public static int countWords(List<String> s, int n) {
// Calculating frequency using HashMap
Map<String, Integer> freq = new HashMap<String, Integer>();
for ( int i = 0 ; i < n; i++) {
String key = s.get(i);
if (freq.containsKey(key)) {
freq.put(key, freq.get(key) + 1 );
} else {
freq.put(key, 1 );
}
}
int count = 0 ;
// Traversing in freq dictionary
for (Map.Entry<String, Integer> entry : freq.entrySet()) {
if (entry.getValue() == 2 ) {
count++;
}
}
return count;
}
// Driver code
public static void main(String[] args) {
List<String> s = new ArrayList<String>();
s.add( "hate" );
s.add( "love" );
s.add( "peace" );
s.add( "love" );
s.add( "peace" );
s.add( "hate" );
s.add( "love" );
s.add( "peace" );
s.add( "love" );
s.add( "peace" );
int n = s.size();
System.out.println(countWords(s, n));
}
} |
Python
# importing Counter from collections from collections import Counter
# Python program to count all words with count exactly 2. # Returns count of words with frequency exactly 2. def countWords(stri, n):
# Calculating frequency using Counter
m = Counter(stri)
count = 0
# Traversing in freq dictionary
for i in m:
if m[i] = = 2 :
count + = 1
return count
# Driver code s = [ "hate" , "love" , "peace" , "love" ,
"peace" , "hate" , "love" , "peace" ,
"love" , "peace" ]
n = len (s)
print (countWords(s, n))
# This code is contributed by vikkycirus |
C#
using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static int CountWords(List< string > s, int n)
{
// Calculating frequency using Dictionary
Dictionary< string , int > freq
= new Dictionary< string , int >();
foreach ( string word in s)
{
if (freq.ContainsKey(word))
freq[word]++;
else
freq.Add(word, 1);
}
int count = 0;
// Traversing in freq dictionary
foreach (KeyValuePair< string , int > pair in freq)
{
if (pair.Value == 2)
count++;
}
return count;
}
static void Main( string [] args)
{
List< string > s = new List< string >{
"hate" , "love" , "peace" , "love" , "peace" ,
"hate" , "love" , "peace" , "love" , "peace"
};
int n = s.Count();
Console.WriteLine(CountWords(s, n));
}
} |
Javascript
// Returns count of words with frequency exactly 2. function countWords(strList) {
// Calculating frequency using Counter
const m = {};
for (let i = 0; i < strList.length; i++) {
const word = strList[i];
m[word] = m[word] ? m[word] + 1 : 1;
}
let count = 0;
// Traversing in freq dictionary
for (const i in m) {
if (m[i] === 2) {
count += 1;
}
}
return count;
} // Driver code const s = [ "hate" , "love" , "peace" , "love" , "peace" , "hate" , "love" , "peace" , "love" , "peace" ];
console.log(countWords(s)); // This code is contributed by adityashatmfh |
Output
1
Time Complexity : O(n)
Auxiliary Space: O(n)