Count occurrences of strings formed using words in another string
Last Updated :
24 Jan, 2022
Given a string A and a vector of strings B, the task is to count the number of strings in vector B that only contains the words from A.
Examples:
Input: A="blue green red yellow"
B[]={"blue red", "green pink", "yellow green"}
Output: 2
Input: A="apple banana pear"
B[]={"apple", "banana apple", "pear banana"}
Output: 3
Approach: Follow the below steps to solve this problem:
- Extract all the words of string A and store them in a set, say st.
- Now traverse on each string in vector B, and get all the words in that string.
- Now check that if all words are present in st, then increment ans by 1.
- Return ans as the solution to the problem.
Below is the implementation of the above approach:
C++
// C++ code for the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to extract all words from a string
vector<string> getWords(string A)
{
vector<string> words;
string t;
for (int i = 0; i < A.size(); i++) {
// If the character is a space
if (A[i] == ' ') {
if (t.size() > 0) {
words.push_back(t);
}
t = "";
}
// Else
else {
t += A[i];
}
}
// Last word
if (t.size() > 0) {
words.push_back(t);
}
return words;
}
// Function to count the number of strings in B
// that only contains the words from A
int countStrings(string A, vector<string>& B)
{
unordered_set<string> st;
vector<string> words;
words = getWords(A);
for (auto x : words) {
st.insert(x);
}
// Variable to store the final answer
int ans = 0;
for (auto x : B) {
words = getWords(x);
bool flag = 0;
for (auto y : words) {
if (st.find(y) == st.end()) {
flag = 1;
break;
}
}
// If all the words are in set st
if (!flag) {
ans++;
}
}
return ans;
}
// Driver Code
int main()
{
string A = "blue green red yellow";
vector<string> B = { "blue red", "green pink", "yellow green" };
cout << countStrings(A, B);
}
Java
// Java code for the above approach
import java.util.*;
class GFG
{
// Function to extract all words from a String
static Vector<String> getWords(String A)
{
Vector<String> words = new Vector<String>();
String t="";
for (int i = 0; i < A.length(); i++) {
// If the character is a space
if (A.charAt(i) == ' ') {
if (t.length() > 0) {
words.add(t);
}
t = "";
}
// Else
else {
t += A.charAt(i);
}
}
// Last word
if (t.length() > 0) {
words.add(t);
}
return words;
}
// Function to count the number of Strings in B
// that only contains the words from A
static int countStrings(String A, String[] B)
{
HashSet<String> st = new HashSet<>();
Vector<String> words = new Vector<String>();
words = getWords(A);
for (String x : words) {
st.add(x);
}
// Variable to store the final answer
int ans = 0;
for (String x : B) {
words = getWords(x);
boolean flag = false;
for (String y : words) {
if (!st.contains(y)) {
flag = true;
break;
}
}
// If all the words are in set st
if (!flag) {
ans++;
}
}
return ans;
}
// Driver Code
public static void main(String[] args)
{
String A = "blue green red yellow";
String []B = { "blue red", "green pink", "yellow green" };
System.out.print(countStrings(A, B));
}
}
// This code is contributed by 29AjayKumar
Python3
# Python 3 code for the above approach
# Function to extract all words from a string
def getWords(A):
words = []
t = ""
for i in range(len(A)):
# If the character is a space
if (A[i] == ' '):
if (len(t) > 0):
words.append(t)
t = ""
# Else
else:
t += A[i]
# Last word
if (len(t) > 0):
words.append(t)
return words
# Function to count the number of strings in B
# that only contains the words from A
def countStrings(A, B):
st = set([])
words = []
words = getWords(A)
for x in words:
st.add(x)
# Variable to store the final answer
ans = 0
for x in B:
words = getWords(x)
flag = 0
for y in words:
if (y not in st):
flag = 1
break
# If all the words are in set st
if (not flag):
ans += 1
return ans
# Driver Code
if __name__ == "__main__":
A = "blue green red yellow"
B = ["blue red", "green pink", "yellow green"]
print(countStrings(A, B))
# This code is contributed by ukasp.
C#
// C# code for the above approach
using System;
using System.Collections.Generic;
public class GFG
{
// Function to extract all words from a String
static List<String> getWords(String A)
{
List<String> words = new List<String>();
String t="";
for (int i = 0; i < A.Length; i++) {
// If the character is a space
if (A[i] == ' ') {
if (t.Length > 0) {
words.Add(t);
}
t = "";
}
// Else
else {
t += A[i];
}
}
// Last word
if (t.Length > 0) {
words.Add(t);
}
return words;
}
// Function to count the number of Strings in B
// that only contains the words from A
static int countStrings(String A, String[] B)
{
HashSet<String> st = new HashSet<String>();
List<String> words = new List<String>();
words = getWords(A);
foreach (String x in words) {
st.Add(x);
}
// Variable to store the readonly answer
int ans = 0;
foreach (String x in B) {
words = getWords(x);
bool flag = false;
foreach (String y in words) {
if (!st.Contains(y)) {
flag = true;
break;
}
}
// If all the words are in set st
if (!flag) {
ans++;
}
}
return ans;
}
// Driver Code
public static void Main(String[] args)
{
String A = "blue green red yellow";
String []B = { "blue red", "green pink", "yellow green" };
Console.Write(countStrings(A, B));
}
}
// This code is contributed by 29AjayKumar
JavaScript
<script>
// JavaScript code for the above approach
// Function to extract all words from a string
function getWords(A) {
let words = [];
let t;
for (let i = 0; i < A.length; i++) {
// If the character is a space
if (A[i] == ' ') {
if (t.length > 0) {
words.push(t);
}
t = "";
}
// Else
else {
t += A[i];
}
}
// Last word
if (t.length > 0) {
words.push(t);
}
return words;
}
// Function to count the number of strings in B
// that only contains the words from A
function countStrings(A, B) {
let st = new Set();
let words;
words = getWords(A);
for (let x of words) {
st.add(x);
}
// Variable to store the final answer
let ans = 0;
for (let x of B) {
words = getWords(x);
let flag = 0;
for (let y = 0; y < words.length; y++) {
if (st.has(words[y])) {
flag = 1;
break;
}
}
// If all the words are in set st
if (flag == 0) {
ans++;
}
}
return ans + 1;
}
// Driver Code
let A = "blue green red yellow";
let B = ["blue red", "green pink", "yellow green"];
document.write(countStrings(A, B));
// This code is contributed by Potta Lokesh
</script>
Time Complexity: O(N*M), where N is the size of vector B and M is the maximum length of in B.
Auxiliary Space: O(N)
Similar Reads
Count occurrences of a word in string Given a two strings s and word. The task is to count the number of occurrences of the string word in the string s.Note: The string word should appear in s as a separate word, not as a substring within other words.Examples: Input: s = "GeeksforGeeks A computer science portal for geeks", word = "porta
11 min read
Count occurrences of a word in string | Set 2 (Using Regular Expressions) Given a string str and a word w, the task is to print the number of the occurrence of the given word in the string str using Regular Expression. Examples: Input: str = "peter parker picked a peck of pickled peppersâ, w = "peck"Output: 1Explanation: There is only one occurrence of the word "peck" in
4 min read
Count occurrences of substring X before every occurrence of substring Y in a given string Given three strings S, X, and Y consisting of N, A, and B characters respectively, the task is to find the number of occurrences of the substring X before every occurrence of the substring Y in the given string S. Examples: Input S = âabcdefdefabcâ, X = âdefâ, Y = âabcâOutput: 0 2Explanation:First o
6 min read
Count of substrings formed using a given set of characters only Given a string str and an array arr[] of K characters, the task is to find the number of substrings of str that contain characters only from the given character array arr[]. Note: The string str and the arr[] contain only lowercase alphabets. Examples: Input: S = "abcb", K = 2, charArray[] = {'a', '
8 min read
Count Occurrences of a Given Character in a String Given a string S and a character 'c', the task is to count the occurrence of the given character in the string.Examples: Input : S = "geeksforgeeks" and c = 'e'Output : 4Explanation: 'e' appears four times in str.Input : S = "abccdefgaa" and c = 'a' Output : 3Explanation: 'a' appears three times in
6 min read