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

「1」で始まり「1」で終わる部分文字列の数をカウントするプログラムをC++で記述します


文字列「str」と文字列の長さを指定したとしましょう。タスクは、特定のバイナリ文字列で「1」で始まり「1」で終わる部分文字列の数をカウントすることです。バイナリ文字列には、「1」と「0」のみが含まれます。たとえば、

入力-1

N = 5
str = ‘11101’

出力

6

説明 −指定されたバイナリ文字列には、「1」で始まり「1」で終わる6つのサブ文字列があります。これらのサブストリングのセットは、{‘11’、 ‘111’、 ‘1110’、 ‘11101’、 ‘1101’、 ‘101’}です。

入力-1

N = 4
str = ‘0011’

出力

1

説明

指定されたバイナリ文字列には、「1」で始まり「1」で終わる1つのサブ文字列があります。これらのサブストリングのセットは、シングルトンセット、つまり{‘11’}です。

この問題を解決するために使用されるアプローチ

指定された文字列について、「1」で始まり「1」で終わる部分文字列の数を数える必要があります。この問題は、「n」人のパーティーでの握手の数を数える必要がある、よく知られている握手問題に似ています。

指定された文字列の1の数を数えると、「1」で始まり「1」で終わる部分文字列のセットを見つけることができます。

  • Nの長さの文字列を入力します。

  • 整数関数countSubstring(int N、string s)は、文字列と文字列の長さを入力として受け取り、「1」で始まり「1」で終わるすべての部分文字列の数を返します。

  • 文字列全体を繰り返し、番号を数えます。文字列の「1」の。

  • いいえを数えます。与えられた文字列の部分文字列(ペア)のn *(n-1)/2による。

  • n *(n-1)/2の結果を返します。

#include<iostream>
using namespace std;
int countSubstring(int N, string s){
   int count=0;
   for(int i=0; s[i]!= '\0'; ++i){
      if( s[i]== '1' )
         count++;
   }
   return count*(count-1)/2;
}
int main() {
   int N=5;
   string str= "11101";
   cout<< countSubstring(N,str)<<endl;
   return 0;
}

出力

上記のコードを実行すると、出力は次のように出力されます。

6

指定された文字列に存在する「1」の数は「4」、つまりカウント=4であるため、「1」で始まり「1」で終わる部分文字列の総数は4 *(4-1)/2になります。 =6.


  1. 階段の数と各階段のステップ数をカウントするC++プログラム

    n個の要素を持つ配列Aがあるとします。アマルが高層ビルの階段を上っていくようにしましょう。登るたびに、1から数え始めます。たとえば、3段と4段の2つの階段を上る場合、1、2、3、1、2、3、4のような数字を話します。配列Aでは、数字はアマルが言った階段の数字を表しています。彼が登った階段の数を数え、各階段の階段の数も印刷する必要があります。 したがって、入力がA =[1、2、3、1、2、3、4、5]の場合、出力は2、[3、5]になります。 ステップ これを解決するには、次の手順に従います- p = 0 n := size of A for initialize i := 0, when i

  2. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &