给定字符串在数组[l, r]范围内出现的次数
简介
在本教程中,我们将使用C++实现示例,以查找输入字符串在一个范围为[l,r]的数组中出现的次数。为了解决此任务,字符串数组中仅使用小写字母。不同的字符串存储在字符串数组中,并遍历以检查特定字符串是否存在。这是针对给定的L和R范围。L和R是数组的起始和结束索引值,用于在输入字符串数组中搜索该范围内的字符串。查找位于输入数组的L和R之间的字符串。
演示1
str_arr[] = {“abc”, “def”, “ghi”} str = “abc” L = 1, R = 2
输出
0
在上面的演示中,L和R的值分别为1和2。我们检查字符串“abc”是否在str_arr[1, 2]范围内存在于str_arr中。从索引值为1的起始值迭代str_array[],并搜索字符串“abc”,直到索引值为2。我们发现“abc”在[1, 2]之间不存在,因为它存在于索引值为0的位置。因此,输出为0。
演示2
str_arr = {“abc”, “ghi”, “cde”} str = “cde” L = 1, R = 3
输出
1
在上面的演示中,我们检查字符串“cde”是否在str_arr[1, 3]范围内存在于str_arr中。迭代str_arr以检查其所有元素的给定范围。“cde”存在于str_arr[1, 2]中。因此,输出为1。
示例中使用的C++库函数
语法
sizeof() : 它是C++中的一个关键字,用于确定运算符、数据类型和变量的大小。它在编译时估算大小。
sizeof(data type);
unordered_map() : 它是C++标准库中的一个容器类,定义在
unordered_map<data_type> nameofunordered_map;
unordered_map::find() : 它是unordered_map类的成员函数。它在unordered_map键值对中搜索特定键。
unordered_map.find(key);
unordered_map::end() : 它是unordered_map类的成员函数,定义在`
unordered_map.end(value);
vector() : 它是C++中大小无界的数组,为其元素提供连续的内存位置。它定义在`
vector <data_type>vector_name;
upper_bound() : 它指的是存储元素的下一个位置(或迭代器),该位置大于指定值。
upper_bound(value);
begin() : 它返回存储在向量数组中的元素的第一个位置。它是C++库中的预定义函数。此函数不接受任何参数。
vector_name.begin();
make_pair() : 它定义在标准C++模板库中。它用于使用其第一个和第二个参数创建值对。参数值可以是不同的数据类型。
make_pair(value1, value2);
算法
初始化一个字符串数组以存储不同的字符串值。
定义一个字符串str,在字符串数组中进行检查。
定义L和R的值。
迭代字符串数组的每个元素以与str进行比较。
取一个计数器变量并将其初始化为0。
如果str与数组的元素匹配,则增加其值。
返回计数器变量并打印它。
示例1
我们使用C++编程概念及其库函数实现其中一个演示。我们使用一种简单的方法,定义一个字符串数组“str_arr{}”。对于给定的范围内的输入字符串str,比较str_arr{}的每个元素。使用计数器变量来计算在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; }
输出
Number of times input string appear in the array is: 1
示例2
为了实现上述演示之一,我们使用unordered_map来存储字符串数组的值。unordered_map索引用于在定义的范围内将输入字符串与数组元素进行比较。
由于unordered_map具有映射值和键值对,因此它有助于快速搜索。
#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; }
输出
Number of times input string appears in the array is : 0
结论
我们完成了本教程,以查找输入字符串在范围为L和R的字符串数组中出现的次数。演示了该任务,使问题陈述更清晰,便于实现。我们使用不同的C++库函数实现了两个示例。在第一个示例中,我们获取一个字符串数组,并迭代定义范围内的元素,并检查它是否与输入字符串匹配。在第二种方法中,使用unordered_map存储索引。要搜索输入字符串的出现次数,请搜索unordered_map索引并打印结果。