Problem Statement:
You are given a string, you need find the 1st repeated word in a string.
Example
Input: : "I am what I am"
Output: I
Here “I” is the first repeated word in the string.
Solution
The solution is very simple.
Here we take a hashmap that has a word and its count.
Then we traverse the string and for each word of that string we increase the count if the string is already present else we create a new entry.
Then we traverse the hashmap and get the word whose count is more than 1.
Solution in C++
#include <vector>
#include <algorithm>
//visit www.ProDeveloperTutorial.com for 450+ solved questions
#include <iostream>
#include <string>
#include <unordered_map>
#include <queue>
#include <sstream>
using namespace std;
string findFirstRepeated(string s)
{
istringstream iss(s);
string token;
unordered_map<string, int> word_with_count;
while (getline(iss, token, ' '))
{
if (word_with_count.find(token) != word_with_count.end())
{
//old word, increase count
word_with_count[token] += 1;
}
else
{
// as it is a new word, insert it
word_with_count.insert(make_pair(token, 1));
}
}
istringstream iss2(s);
while (getline(iss2, token, ' '))
{
//now check if the word exist and the count is greater than 1
int count = word_with_count[token];
if (count > 1)
{
return token;
}
}
return "False";
}
// driver program
int main()
{
string s("I am what I am");
string firstWord = findFirstRepeated(s);
if (firstWord != "False")
cout << "The first repeated word is = " << firstWord << endl;
else
cout << "No Repetitionn";
return 0;
}
Output:
The first repeated word is = I