
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Number of Times the Given String Occurs in the Array in the Range
Introduction
In this tutorial, we implement examples using C++ to find the number of times an input string occurs in an array of the range [l,r]. Only lowercase alphabets are used in the string array to resolve this task. Different strings are stored in the string array and traversed to check if a particular string exists. This is for a given range of L and R. L and R are the starting and ending index values of an array to search a string for that range in the input string array. Find string lying between L and R of the input array.
Demonstration 1
str_arr[] = {"abc", "def", "ghi"} str = "abc" L = 1, R = 2
Output
0
In the above demonstration, the values of L and R are 1 and 2 respectively. We check if the string "abc" is present in str_arr within the range of str_arr[1, 2]. Iterate the str_array[] from the starting index value of 1 and search for string "abc" till the index value is 2. We find that "abc" does not exist between [1, 2] as it exists at the index value 0. Hence, the output is 0.
Demonstration 2
str_arr = {"abc", "ghi", "cde"} str = "cde" L = 1, R = 3
Output
1
In the above demonstration, we check if the string "cde" is present in the str_arr within the range of str_arr[1, 3]. Iterate the str_arr to check all its elements for the given range. "cde" exists in the str_arr[1, 2]. Hence, the output is 1.
C++ Library Functions Used in the Examples
Syntax
size of() : it is a keyword in C++ which determines the size of an operator, data type, and variables. It estimates the size at compile time.
sizeof(data type);
unordered_map() : It is a container class in the C++ standard library and is defined in the
unordered_map<data_type> nameofunordered_map;
unordered_map: find() : It is a member function of the unordered_map class. It searches for a particular key in unordered_map key-value pairs.
unordered_map.find(key);
unordered_map:end() : It is a member function of the unordered_map class and is defined in the <std> header file. It returns the iterator pointing to the position beyond the last element of the unordered_map.
unordered_map.end(value);
vector() : It is a size unbounded array in C++ that provides contiguous memory location to its elements. It is defined in the <std> header file.
vector <data_type>vector_name;
upper_bound() : It refers to the position or iterator of the next position of the stored elements which is greater than the specified value.
upper_bound(value);
begin() : it returns the first position of the elements stored in a vector array. It is a predefined function in the C++ library. This function does not take any parameters.
vector_name.begin();
Make_pair() : It is defined in the standard C++ Template Library. It is used to make pair values using its first and second parameters. Parameter values can be of different data types.
make_pair(value1, value2);
Algorithm
Initialize a string array to store different string values.
Define a string str to be checked in the string array.
Define the values of the L and R.
Iterate over each element of the string array to compare str.
Take a counter variable and initialize it with 0.
If str matches the elements of an array, increase its value.
Return the counter variable and print it.
Example 1
We implement one of the demonstrations using C++ programming concepts and its library functions. We use a simple approach, defining a string array "str_arr{}". Compare each element of the str_arr{} for the given range for the input string str. Use a counter variable to count the occurrence of input string for a given range in the str_arr{}.
#include <bits/stdc++.h> using namespace std; // User-defined function to count the number of occurrence of a given string int totalAppearence(string str_arr[], int a, string s, int L, int R){ //counter variable int cnt=0; //Iterating for the given values of L and R for (int x = L-1; x < R; x++){ //condition for matches string if(str_arr[x]==s)cnt++; } return cnt; } // Program Controller int main(){ string str_arr[] = { "abc", "def", "abc" }; int a = sizeof(str_arr) / sizeof(string); int L = 1; int R = 2; string s = "abc"; cout << "Number of times input string appear in the array is:" << totalAppearence(str_arr, a, s, L, R); return 0; }
Output
Number of times input string appear in the array is: 1
Example 2
To implement one of the above demonstrations, we used unordered_map to store the string array values. The unordered_map indices are used to compare the input string within the defined range with the array elements.
Unordered_map helps search fast due to its mapped values and key values pair.
#include <bits/stdc++.h> using namespace std; // User-defined function to count the occurrence of input string int totalAppearence(string str_arr[], int a, string s, int L, int R) { // initialized unordered_map unordered_map<string, vector<int> > N; for (int x = 0; x < a; x++) { string t = str_arr[x]; auto i = N.find(t); if (i == N.end()) { vector<int> B; B.push_back(x + 1); N.insert(make_pair(t, B)); } else { i->second.push_back(x + 1); } } auto i = N.find(s); // When string is not in array if (i == N.end()) return 0; //when string is found in array vector<int> B = i->second; int m = upper_bound(B.begin(), B.end(), R) - B.begin(); int n = upper_bound(B.begin(), B.end(), L - 1) - B.begin(); return (m - n); } // program controller int main() { string str_arr[] = { "abc", "dfe", "cba" }; int a = sizeof(str_arr) / sizeof(string); int L = 1; int R = 1; string s = "gef"; cout << "Number of times input string appears in the array is : " << totalAppearence(str_arr, a, s, L, R); return 0; }
Output
Number of times input string appears in the array is : 0
Conclusion
We reached the end of this tutorial to find the number of times an input string occurs in a string array of Range L, and R. Demonstrated the task to make the problem statement clear for easy implementation. We implemented two examples using different C++ library functions. In the first example, we take a string array and iterate over the defined range element and check if it matches the input string or not. In the second approach, use an unordered_map to store indices. To search for the occurrence of the input string, search the unordered_map indices and print the result.