计算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

回到顶部