计算C ++中相等数目的0、1和2的子字符串
给出的字符串str仅包含0、1和2。目标是找到所有str的子串,这些子串具有相等的0、1和2。如果str为“ 12012”。等于0、1和2的子字符串分别为“ 120”,“ 201”和“ 012”。计数为3。
让我们通过示例来理解。
输入-str =“ 112200120”
输出-相等数量的0s,1s和2s的子字符串计数为-5
说明-子字符串将是
str[0-5]=”112200”, str[1-6]=”122001”, str[5-7]=”012”, str[6-8]=”120”, str[7-0]=”201”
输入-str =“ 12012”
输出-等于0、1和2的子字符串数为:3
说明-子字符串将是-
str[0-2]=”120” , str[1-3]=”201”, str[2-4]=”012”
以下程序中使用的方法如下
取一串整数值并计算字符串的长度
将数据传递给函数进行进一步处理。
进行一个临时变量计数,以存储相等数目的0、1和2的子字符串的计数。
创建一个类型映射的变量,该变量将线对映射到给定数字的频率。
将1存储在对(0,0)中,并从0开始启动FOR循环,直到字符串的长度。
在循环内部,检查IF str [i] = 0,然后将计数增加0,ELSE IF str [i] = 1,然后将计数增加1,ELSE将计数增加2。
将0和1设置为0-1和0和2设置为0-2。
创建一对zero_one和zero_two,并将计数设置为count + map_pair的差值,该差值是通过成对计算得出的。
将map_pair增加1。
返回计数
打印结果。
示例
#include <bits/stdc++.h>using namespace std;
int count_string(string str_1, int length_str1, string str_2, int length_str2){
int count = INT_MAX;
int arr_1[26] = { 0 };
int arr_2[26] = { 0 };
for (int i = 0; i < length_str1; i++){
arr_1[str_1[i] - 'a']++;
}
for (int i = 0; i < length_str2; i++){
arr_2[str_2[i] - 'a']++;
}
int alphabets = 26;
for (int i = 0; i < alphabets; i++){
if(arr_2[i]){
count = min(count, arr_1[i] / arr_2[i]);
}
}
return count;
}
int main(){
string str_1 = "knowledge", str_2 = "know";
int length_str1 = str_1.size();
int length_str2 = str_2.size();
cout<<"Count occurrences of a string that can be constructed from another given string are: "<<count_string(str_1,length_str1, str_2, length_str2);
return 0;
}
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of Substrings with equal number of 0s, 1s and 2s are: 1
以上是 计算C ++中相等数目的0、1和2的子字符串 的全部内容, 来源链接: utcz.com/z/316029.html