# Count of strings whose prefix match with the given string to a given length k

Given an array of strings **arr[]** and given some queries where each query consists of a string **str** and an integer **k**. The task is to find the count of strings in **arr[]** whose prefix of length **k** matches with the **k** length prefix of **str**.

**Examples:**

Input:arr[] = {“abba”, “abbb”, “abbc”, “abbd”, “abaa”, “abca”}, str = “abbg”, k = 3

Output:4

“abba”, “abbb”, “abbc” and “abbd” are the matching strings.

Input:arr[] = {“geeks”, “geeksforgeeks”, “forgeeks”}, str = “geeks”, k = 2

Output:2

**Prerequisite:** Trie | (Insert and Search)

**Approach:** We will form a trie and insert all the strings in the trie and we will create another variable (frequency) for each node which will store the frequency of prefix of the given strings. Now to get the count of strings whose prefix matches with the given string to a given length k we will have to traverse the trie to the length k from the root, the frequency of the Node will give the count of such strings.

Below is the implementation of the above approach:

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Trie node (considering only lowercase alphabets) ` `struct` `Node { ` ` ` `Node* arr[26]; ` ` ` `int` `freq; ` `}; ` ` ` `// Function to insert a node in the trie ` `Node* insert(string s, Node* root) ` `{ ` ` ` `int` `in; ` ` ` `Node* cur = root; ` ` ` `for` `(` `int` `i = 0; i < s.length(); i++) { ` ` ` `in = s[i] - ` `'a'` `; ` ` ` ` ` `// If there is no node created then create one ` ` ` `if` `(cur->arr[in] == NULL) ` ` ` `cur->arr[in] = ` `new` `Node(); ` ` ` ` ` `// Increase the frequency of the node ` ` ` `cur->arr[in]->freq++; ` ` ` ` ` `// Move to the next node ` ` ` `cur = cur->arr[in]; ` ` ` `} ` ` ` ` ` `// Return the updated root ` ` ` `return` `root; ` `} ` ` ` `// Function to return the count of strings ` `// whose prefix of length k matches with the ` `// k length prefix of the given string ` `int` `find(string s, ` `int` `k, Node* root) ` `{ ` ` ` `int` `in, count = 0; ` ` ` `Node* cur = root; ` ` ` ` ` `// Traverse the string ` ` ` `for` `(` `int` `i = 0; i < s.length(); i++) { ` ` ` `in = s[i] - ` `'a'` `; ` ` ` ` ` `// If there is no node then return 0 ` ` ` `if` `(cur->arr[in] == NULL) ` ` ` `return` `0; ` ` ` ` ` `// Else traverse to the required node ` ` ` `cur = cur->arr[in]; ` ` ` ` ` `count++; ` ` ` ` ` `// Return the required count ` ` ` `if` `(count == k) ` ` ` `return` `cur->freq; ` ` ` `} ` ` ` `return` `0; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `string arr[] = { ` `"abba"` `, ` `"abbb"` `, ` `"abbc"` `, ` `"abbd"` `, ` `"abaa"` `, ` `"abca"` `}; ` ` ` `int` `n = ` `sizeof` `(arr) / ` `sizeof` `(string); ` ` ` ` ` `Node* root = ` `new` `Node(); ` ` ` ` ` `// Insert the strings in the trie ` ` ` `for` `(` `int` `i = 0; i < n; i++) ` ` ` `root = insert(arr[i], root); ` ` ` ` ` `// Query 1 ` ` ` `cout << find(` `"abbg"` `, 3, root) << endl; ` ` ` ` ` `// Query 2 ` ` ` `cout << find(` `"abg"` `, 2, root) << endl; ` ` ` ` ` `// Query 3 ` ` ` `cout << find(` `"xyz"` `, 2, root) << endl; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

4 6 0

## Recommended Posts:

- Find the longest common prefix between two strings after performing swaps on second string
- Sub-strings of a string that are prefix of the same string
- Print the longest prefix of the given string which is also the suffix of the same string
- Count of strings that become equal to one of the two strings after one removal
- Python program to print the substrings that are prefix of the given string
- Sub-strings of length K containing same character
- Maximum sum increasing subsequence from a prefix and a given element after prefix is must
- Check if a string contains a palindromic sub-string of even length
- Count unique subsequences of length K
- Count squares with odd side length in Chessboard
- Find the count of numbers that can be formed using digits 3, 4 only and having length at max N.
- Count common characters in two strings
- Count the number of common divisors of the given strings
- Count strings with consonants and vowels at alternate position
- Smallest Greater (than S) String of length K whose letters are subset of S

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.