C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で0、1、2の数が等しい部分文字列をカウントします


0、1、および2のみを含む文字列strが与えられます。目標は、0の1と2の数が等しいstrのすべてのサブストリングを見つけることです。 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の変数を作成します。

  • 1をペア(0,0)に格納し、ループFORを0から文字列の長さまで開始します。

  • ループ内で、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のペアを作成し、カウントをカウント+ペアを作成して計算された差分値の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

  1. C ++で許可されている重複を使用して、指定された数に等しい積を持つトリプレットの数をカウントします

    一連の数字Arr[]が与えられます。目標は、積が与えられた数pに等しいトリプレットの数を数えることです。同じ値で要素が異なる複数のトリプレットが存在する可能性があります。たとえば、配列[1,2,3,1,2]の(1,2,3)と(3,1,2)は、要素が異なるが値が同じである場合、異なるものとしてカウントされます。 例を挙げて理解しましょう。 入力 − arr [] ={1,2,3,2,4,1,5}、p =4 出力 −トリプレットの数:3 説明 − Triplet 1[ 1,2,3,2,4,1,5 ] → (1,2,2) product=4 Triplet 2 [ 1,2,3

  2. C++でビット単位でゼロに等しいトリプル

    整数Aの配列があるとします。-となるようなインデックス(i、j、k)のトリプルの数を見つける必要があります。 0 <=i