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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP