C++中统计具有相同数量的0、1和2的子字符串
给定一个只包含0、1和2的字符串str。目标是找到str的所有子字符串,这些子字符串具有相同数量的0、1和2。如果str是“12012”,则具有相同数量的0、1和2的子字符串将是“120”、“201”和“012”。计数将为3。
让我们通过示例来理解。
输入 − str=”112200120”
输出 −具有相同数量的0、1和2的子字符串个数为− 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”
下面程序中使用的方法如下:
获取一个整数类型的字符串并计算字符串的长度。
将数据传递给函数进行进一步处理。
使用一个名为count的临时变量来存储具有相同数量的0、1和2的子字符串的计数。
创建一个map类型的变量,它将键值对映射到给定数字的频率。
在键值对(0,0)处存储1,并从0到字符串长度开始循环。
在循环内,检查IF str[i] = 0,则增加0的计数;ELSE IF str[i] = 1,则增加1的计数;ELSE增加2的计数。
将0和1设置为0 - 1和0,将0和2设置为0 - 2。
创建一对zero_one和zero_two,并将计数设置为count + map_pair的差值(通过创建键值对计算得出)。
将map_pair加1。
返回count。
打印结果。
示例
#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
广告