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

C++でバイナリ部分文字列をカウントする


文字列sがあるとすると、同じ数の0と1を持つ連続するサブ文字列の数を見つける必要があり、これらのサブ文字列のすべての0とすべての1が連続してグループ化されます。サブストリングが複数回発生する場合は、発生回数がカウントされます。

したがって、入力が「11001100」の場合、サブストリングは「1100」、「10」、「0011」、「01」、「1100」、「10」であるため、出力は6になります。

これを解決するには、次の手順に従います-

  • サイズ2の配列cntを定義し、これに0を入力します
  • res:=0
  • iを初期化する場合:=0、i
  • num:=s[i]-「0」のASCII
  • iが0と同じか、s[i]がs[i-1]と等しくない場合、-
    • cnt [num]:=0
  • (cnt [num]を1増やします)
  • cnt [num] <=cnt [1-num]の場合、-
    • (解像度を1増やします)
  • return res
  • 理解を深めるために、次の実装を見てみましょう-

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int countBinarySubstrings(string s) {
          int cnt[2] = { 0 };
          int res = 0;
          for (int i = 0; i < s.length(); ++i) {
             int num = s[i] - '0';
             if (i == 0 || s[i] != s[i - 1])
                cnt[num] = 0;
             ++cnt[num];
             if (cnt[num] <= cnt[1 - num])
                ++res;
          }
          return res;
       }
    };
    main(){
       Solution ob;
       cout << (ob.countBinarySubstrings("11001100"));
    }

    入力

    "11001100"

    出力

    6

    1. C++のバイナリツリーで適切なノードを数える

      二分木があるとすると、ルートからXへのパスにXより大きい値のノードがない場合、ツリー内のノードXはgoodという名前になります。ここで、二分木内の適切なノードの数を見つける必要があります。 したがって、入力が次のような場合、 その場合、出力は4になり、色付きのノードは適切なノードです。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これは、node、val、を取ります。 ノードがnullの場合、- 戻る ret:=ret +(val <=ノードのvalの場合は1、それ以外の場合は0) dfs(ノードの左側、ノードのvalと

    2. C++で高さhのバランスの取れた二分木を数える

      二分木の高さHが与えられます。目標は、指定された高さのバランスの取れたバイナリツリーの数/数を見つけることです。 二分木 −は、各ノードに最大2つの子(左の子と右の子)を持つツリーデータ構造です。 高さバランスのとれた二分木 −は、すべてのノードの2つのサブツリーの深さが1または0だけ異なるバイナリツリーとして定義されます。これは、すべてのノードの左側のサブツリーと右側のサブツリーの高さであり、最大差は1です。 次の図には、高さh=3で可能な高さのバランスが取れた二分木が含まれています。 入力 Height H=2 出力 Count of Balanced Binary Trees