# Frequency of a string in an array of strings

You are given a collection of strings and a list of queries. For every query there is a string given. We need to print the number of times the given string occurs in the collection of strings. **Examples:**

Input : arr[] = {wer, wer, tyu, oio, tyu} q[] = {wer, tyu, uio} Output : 2 2 0 Explanation : q[0] appears two times in arr[], q1[] appears

**Method 1 (Simple)**

The idea is simple, for every query string we compare it with all strings given in array. If the query string is matches, we increment count.

## C++

`// C++ program to find number of times a` `// string appears in an array.` `#include<bits/stdc++.h>` `using` `namespace` `std;` `// Returns count of occurrences of s in arr[]` `int` `search(string arr[], string s, ` `int` `n)` `{` ` ` `int` `counter = 0;` ` ` `for` `(` `int` `j = 0; j < n; j++)` ` ` ` ` `// Checking if string given in query` ` ` `// is present in the given string.` ` ` `// If present, increase times` ` ` `if` `(s == arr[j])` ` ` `counter++;` ` ` `return` `counter;` `}` ` ` `void` `answerQueries(string arr[], string q[],` ` ` `int` `n, ` `int` `m)` `{` ` ` `for` `(` `int` `i = 0; i < m; i++)` ` ` `cout << search(arr, q[i], n) << ` `" "` `;` `} ` `// Driver Code` `int` `main()` `{` ` ` `string arr[] = { ` `"aba"` `, ` `"baba"` `,` ` ` `"aba"` `, ` `"xzxb"` `};` ` ` `string q[] = { ` `"aba"` `, ` `"xzxb"` `, ` `"ab"` `};` ` ` ` ` `int` `n = ` `sizeof` `(arr) / ` `sizeof` `(arr[0]);` ` ` `int` `m = ` `sizeof` `(q) / ` `sizeof` `(q[0]);` ` ` ` ` `answerQueries(arr, q, n, m);` `}` `// This code is contributed by rutvik_56` |

## Java

`// Java program to find number of times a string` `// appears in an array.` `class` `SubString` `{` ` ` `/* Returns count of occurrences of s in arr[] */` ` ` `static` `int` `search(String[]arr, String s)` ` ` `{` ` ` `int` `counter = ` `0` `;` ` ` `for` `(` `int` `j = ` `0` `; j < arr.length; j++)` ` ` `/* checking if string given in query is` ` ` `present in the given string. If present,` ` ` `increase times*/` ` ` `if` `(s.equals(arr[j]))` ` ` `counter++;` ` ` `return` `counter;` ` ` `}` ` ` `static` `void` `answerQueries(String[] arr, String q[])` ` ` `{` ` ` `for` `(` `int` `i=` `0` `;i<q.length; i++)` ` ` `System.out.print(search(arr, q[i]) + ` `" "` `);` ` ` `}` ` ` `/* driver code*/` ` ` `public` `static` `void` `main(String[] args) {` ` ` `String[] arr = {` `"aba"` `,` `"baba"` `,` `"aba"` `,` `"xzxb"` `};` ` ` `String[] q = {` `"aba"` `,` `"xzxb"` `,` `"ab"` `};` ` ` `answerQueries(arr, q);` ` ` `}` `}` |

## Python3

`# Python3 program to find number of` `# times a string appears in an array.` `# Returns count of occurrences of s in arr[]` `def` `search(arr, s):` ` ` `counter ` `=` `0` ` ` `for` `j ` `in` `range` `(` `len` `(arr)):` ` ` ` ` `# checking if string given in query` ` ` `# is present in the given string. ` ` ` `# If present, increase times` ` ` `if` `(s ` `=` `=` `(arr[j])):` ` ` `counter ` `+` `=` `1` ` ` `return` `counter` `def` `answerQueries(arr, q):` ` ` `for` `i ` `in` `range` `(` `len` `(q)):` ` ` `print` `(search(arr, q[i]),` ` ` `end ` `=` `" "` `)` `# Driver code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` `arr ` `=` `[` `"aba"` `, ` `"baba"` `, ` `"aba"` `, ` `"xzxb"` `]` ` ` `q ` `=` `[` `"aba"` `, ` `"xzxb"` `, ` `"ab"` `]` ` ` `answerQueries(arr, q)` `# This code is contributed` `# by PrinciRaj19992` |

## C#

`// C# program to find number of` `// times a string appears in an array.` `using` `System;` `class` `SubString` `{` ` ` `/* Returns count of occurrences of s in arr[] */` ` ` `static` `int` `search(String[]arr, String s)` ` ` `{` ` ` `int` `counter = 0;` ` ` `for` `(` `int` `j = 0; j < arr.Length; j++)` ` ` `/* checking if string given in query is` ` ` `present in the given string. If present,` ` ` `increase times*/` ` ` `if` `(s.Equals(arr[j]))` ` ` `counter++;` ` ` `return` `counter;` ` ` `}` ` ` `static` `void` `answerQueries(String []arr, String []q)` ` ` `{` ` ` `for` `(` `int` `i = 0; i < q.Length; i++)` ` ` `Console.Write(search(arr, q[i]) + ` `" "` `);` ` ` `}` ` ` `// Driver code` ` ` `public` `static` `void` `Main()` ` ` `{` ` ` `String []arr = {` `"aba"` `,` `"baba"` `,` `"aba"` `,` `"xzxb"` `};` ` ` `String []q = {` `"aba"` `,` `"xzxb"` `,` `"ab"` `};` ` ` `answerQueries(arr, q);` ` ` `}` `}` `//This code is contributed by nitin mittal` |

## PHP

`<?php` `# Php program to find number of` `# times a string appears in an ` `array` `.` `# Returns ` `count` `of occurrences of s in arr[]` `function` `search(` `$arr` `, ` `$s` `)` `{` ` ` `$counter` `= 0;` ` ` `for` `(` `$j` `=0; ` `$j` `<` `count` `(` `$arr` `); ` `$j` `++)` ` ` `{` ` ` `# checking ` `if` `string given in query` ` ` `# is present in the given string.` ` ` `# If present, increase times` ` ` `if` `(` `$s` `== (` `$arr` `[` `$j` `]))` ` ` `$counter` `+= 1;` ` ` `}` ` ` `return` `$counter` `;` `}` `function` `answerQueries(` `$arr` `, ` `$q` `)` `{` ` ` `for` `(` `$i` `=0; ` `$i` `<` `count` `(` `$q` `); ` `$i` `++)` ` ` `{` ` ` `echo` `(search(` `$arr` `, ` `$q` `[` `$i` `]));` ` ` `echo` `(` `" "` `);` ` ` `}` `}` `# Driver code` `$arr` `= ` `array` `(` `"aba"` `, ` `"baba"` `, ` `"aba"` `, ` `"xzxb"` `);` `$q` `= ` `array` `(` `"aba"` `, ` `"xzxb"` `, ` `"ab"` `);` `answerQueries(` `$arr` `, ` `$q` `);` `# This code is contributed` `# by Shivi_Aggarwal` `?>` |

**Output:**

2 1 0

**Method 2 (Using Trie)**

Trie an efficient data structure used for strong and retrieval of data like strings. The searching complexity is optimal as key length.

In this solution we insert the collection of strings in the Trie data structure so they get stored in it. One important thing is, we keep count of occurrences in leaf nodes. Then we search the Trie for the given query string and check if it is present in the Trie.

## CPP

`// C++ program to count number of times` `// a string appears in an array of strings` `#include<iostream>` `using` `namespace` `std;` `const` `int` `MAX_CHAR = 26;` `struct` `Trie` `{` ` ` `// To store number of times` ` ` `// a string is present. It is` ` ` `// 0 is string is not present` ` ` `int` `cnt;` ` ` `Trie *node[MAX_CHAR];` ` ` `Trie()` ` ` `{` ` ` `for` `(` `int` `i=0; i<MAX_CHAR; i++)` ` ` `node[i] = NULL;` ` ` `cnt = 0;` ` ` `}` `};` `/* function to insert a string into the Trie*/` `Trie *insert(Trie *root,string s)` `{` ` ` `Trie *temp = root;` ` ` `int` `n = s.size();` ` ` `for` `(` `int` `i=0; i<n; i++)` ` ` `{` ` ` `/*calculation ascii value*/` ` ` `int` `index = s[i]-` `'a'` `;` ` ` `/* If the given node is not already` ` ` `present in the Trie than create` ` ` `the new node*/` ` ` `if` `(!root->node[index])` ` ` `root->node[index] = ` `new` `Trie();` ` ` `root = root->node[index];` ` ` `}` ` ` `root->cnt++;` ` ` `return` `temp;` `}` `/* Returns count of occurrences of s in Trie*/` `int` `search(Trie *root, string s)` `{` ` ` `int` `n = s.size();` ` ` `for` `(` `int` `i=0; i<n; i++)` ` ` `{` ` ` `int` `index = s[i]-` `'a'` `;` ` ` `if` `(!root->node[index])` ` ` `return` `0;` ` ` `root = root->node[index];` ` ` `}` ` ` `return` `root->cnt;` `}` `void` `answerQueries(string arr[], ` `int` `n, string q[],` ` ` `int` `m)` `{` ` ` `Trie *root = ` `new` `Trie();` ` ` `/* inserting in Trie */` ` ` `for` `(` `int` `i=0; i<n; i++)` ` ` `root = insert(root,arr[i]);` ` ` `/* searching the strings in Trie */` ` ` `for` `(` `int` `i=0; i<m; i++)` ` ` `cout << search(root, q[i]) << ` `" "` `;` `}` `/* Driver code */` `int` `main()` `{` ` ` `string arr[] = {` `"aba"` `,` `"baba"` `,` `"aba"` `,` `"xzxb"` `};` ` ` `int` `n = ` `sizeof` `(arr)/` `sizeof` `(arr[0]);` ` ` `string q[] = {` `"aba"` `,` `"xzxb"` `,` `"ab"` `};` ` ` `int` `m = ` `sizeof` `(q)/` `sizeof` `(q[0]);` ` ` `answerQueries(arr, n, q, m);` ` ` `return` `0;` `}` |

## Python3

`# Python3 program to count number of times` `# a string appears in an array of strings` `MAX_CHAR ` `=` `26` `class` `Trie:` ` ` `# To store number of times` ` ` `# a string is present. It is` ` ` `# 0 is string is not present` ` ` `def` `__init__(` `self` `):` ` ` `self` `.cnt ` `=` `0` ` ` `self` `.node ` `=` `[` `None` `for` `i ` `in` `range` `(MAX_CHAR)]` `# function to insert a string into the Trie` `def` `insert(root, s):` ` ` `temp ` `=` `root` ` ` `n ` `=` `len` `(s)` ` ` ` ` `for` `i ` `in` `range` `(n):` ` ` `# calculation ascii value` ` ` `index ` `=` `ord` `(s[i]) ` `-` `ord` `(` `'a'` `)` ` ` `''' If the given node is not already` ` ` `present in the Trie than create` ` ` `the new node '''` ` ` `if` `(` `not` `root.node[index]):` ` ` `root.node[index] ` `=` `Trie()` ` ` `root ` `=` `root.node[index] ` ` ` `root.cnt ` `+` `=` `1` ` ` `return` `temp` `# Returns count of occurrences of s in Trie` `def` `search( root, s):` ` ` `n ` `=` `len` `(s)` ` ` ` ` `for` `i ` `in` `range` `(n): ` ` ` `index ` `=` `ord` `(s[i]) ` `-` `ord` `(` `'a'` `)` ` ` `if` `(` `not` `root.node[index]):` ` ` `return` `0` ` ` `root ` `=` `root.node[index] ` ` ` `return` `root.cnt` `def` `answerQueries(arr, n, q, m):` ` ` `root ` `=` `Trie()` ` ` `# inserting in Trie` ` ` `for` `i ` `in` `range` `(n):` ` ` `root ` `=` `insert(root, arr[i])` ` ` `# searching the strings in Trie` ` ` `for` `i ` `in` `range` `(m):` ` ` `print` `(search(root, q[i]))` `# Driver code` `if` `__name__` `=` `=` `'__main__'` `:` ` ` `arr ` `=` `[` `"aba"` `, ` `"baba"` `, ` `"aba"` `, ` `"xzxb"` `]` ` ` `n ` `=` `len` `(arr)` ` ` `q ` `=` `[` `"aba"` `, ` `"xzxb"` `, ` `"ab"` `]` ` ` `m ` `=` `len` `(q)` ` ` `answerQueries(arr, n, q, m)` ` ` `# This code is contributed by pratham76` |

**Output: **

2 1 0

**Method 3 (Hashing)**

We can use a hash map and insert all given strings into it. For every query string, we simply do a look-up in the hash map.

Please refer Data Structure for Dictionary for comparison of hashing and Trie based solutions.

This article is contributed by **Pranav**. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.