給定字串在陣列[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索引並列印結果。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP