# HackerRank Find a Word Solution

Hello Programmers, In this post, you will learn how to solve HackerRank Find a Word Solution. This problem is a part of the Regex HackerRank Series.

One more thing to add, don’t straight away look for the solutions, first try to solve the problems by yourself. If you find any difficulty after trying several times, then look for the solutions. We are going to solve the  Regex HackerRank Solutions using  CPP, JAVA, PYTHON, JavaScript & PHP Programming Languages.

## HackerRank Find a Word Solution

Problem

We define a word as a non-empty maximum sequence of characters that can contain only lowercase letters, uppercase letters, digits and underscores ‘_’ (ASCII value 95). Maximum sequence means that the word has to be immediately preceeded by a character not allowed to occur in a word or by the left boundary of the sentence, and it has to be immediately followed by a character not allowed to occur in a word or by the right boundary of the sentence.

Given N sentences and T words, for each of these words, find the number of its occurences in all the N sentences.

Input Format

In the first line there is a single integer N. Each of the next N lines contains a single sentence. After that, in the next line, there is a single integer T denoting the number of words. In the i-th of the next T lines, there is a single word denoting the i-th word for which, you have to find the number of its occurences in the sentences.

Constraints

• 1 <= N <= 100
• 1 <= T <= 10

For every word, print the number of occurrences of the word in all the N sentences listed.

Sample Input

1
foo bar (foo) bar foo-bar foo_bar foo’bar barfoo bar, foo.
1
foo

Sample Output

6

Explanation

• foo is the first word
• (foo) is preceeded by ‘(‘ and followed by ‘)’, so it’s the second word.
• foo-bar is considered as two words and ‘foo’ is the first of them. It is preceeded by a space and followed by a hyphen ‘-‘
• bar-foo also contains foo for the same reason mentioned above
• foo_bar is a single single word and hence foo in it is not counted
• foo’bar is considered as two words and ‘foo’ is the first of them. It is preceeded by a space and followed by a apostrophe “‘”
• foo. as it is preceeded by a space and followed by a dot’.

### HackerRank Find a Word Solution in Cpp

```#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;

bool chK(char ch)
{
if(ch>='a' && ch<='z')
return true;
if(ch>='A' && ch<='Z')
return true;
if(ch>='0' && ch<='9')
return true;
if(ch=='_')
return true;
return false;
}

int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int i,j,k,num,test;
map<string,int> list;
string str,in;

cin>>num;
getchar();

while(num--)
{
getline(cin,in);
str="";
for(i=0;i<in.size();i++)
{
if(chK(in.at(i)))
{
str+=in.at(i);
}
else
{
if(str.size()>0)
list[str]++;
str="";
}
}
if(str.size()>0)
list[str]++;
}

cin>>test;

while(test--)
{
cin>>str;
cout<<list[str]<<endl;
}
list.clear();

return 0;
}```

### HackerRank Find a Word Solution in Java

```import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Solution {
public static void main(String[] args)
{
String[] sentences = new String[100];
int i;
for( i = 0 ; i < nSentences; i++)
{
}
for( i = 0 ; i < nWords ; i++)
{
Pattern p = Pattern.compile("\\b"+word+"\\b");
int count = 0;
for(int j = 0 ; j < nSentences ; j++)
{
Matcher m = p.matcher(sentences[j]);
while( m.find())
count++;
}
System.out.println(count);
}
}
}```

### HackerRank Find a Word Solution in Python

```import re
n = int(raw_input())
words = []
regex = "[^a-zA-Z0-9_]*"
for i in range(0, n):
words += re.split(" *", raw_input())
t = int(raw_input())
for i in range(0, t):
s = raw_input()
count = 0
for w in words:
for e in re.split(regex, w):
if e == s: count += 1
print count```

### HackerRank Find a Word Solution in JavaScript

```process.stdin.resume();
process.stdin.setEncoding("ascii");
process.stdin.on("data", function (input) {
input = input.split('\n');
var n = parseInt(input[0]),
t = parseInt(input[n+1]),
ts = n+2,
strs = input.slice(1,n+1).join(' ').split(' '),
tc = input.slice(ts,ts+t),
tcc = new Array(),
c = 0, r, m = false;
for (i=0, j=tc.length; i<j; i+=1) {
c = 0;
r = new RegExp('(?:[\\W]'+tc[i]+'(?![\\w])|(?![\\w])'+tc[i]+'[\\W])','ig');
for (ii=0, jj=strs.length; ii<jj; ii+=1) {
var tmp = '-'+strs[ii]+'-';
m = tmp.match(r);
if (m) {
c += m.length;
}
}
console.log(c);
}
});```

### HackerRank Find a Word Solution in PHP

```<?php
\$_fp = fopen("php://stdin", "r");
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
fscanf(\$_fp, "%d", \$m);
\$lines = array();
for (\$i = 0; \$i < \$m; \$i++) {
\$lines[] = fgets(\$_fp);
}
\$lines = preg_split('/[^0-9a-z_]+/', implode(' ', \$lines));
\$lines = implode(' ', \$lines);
fscanf(\$_fp, "%d", \$m);
\$searches = array();
for (\$i = 0; \$i < \$m; \$i++) {
\$searches[] = trim(fgets(\$_fp));
}
foreach (\$searches as \$search) {
\$search = '/\b' . \$search . '\b/';
print preg_match_all(\$search, \$lines, \$matches) . PHP_EOL;
}```

Disclaimer: This problem (Find a Word) is generated by HackerRank but the solution is provided by Chase2learn. This tutorial is only for Educational and Learning purposes.

Sharing Is Caring