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増やします)
理解を深めるために、次の実装を見てみましょう-
例
#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
-
C++のバイナリツリーで適切なノードを数える
二分木があるとすると、ルートからXへのパスにXより大きい値のノードがない場合、ツリー内のノードXはgoodという名前になります。ここで、二分木内の適切なノードの数を見つける必要があります。 したがって、入力が次のような場合、 その場合、出力は4になり、色付きのノードは適切なノードです。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これは、node、val、を取ります。 ノードがnullの場合、- 戻る ret:=ret +(val <=ノードのvalの場合は1、それ以外の場合は0) dfs(ノードの左側、ノードのvalと
-
C++で高さhのバランスの取れた二分木を数える
二分木の高さHが与えられます。目標は、指定された高さのバランスの取れたバイナリツリーの数/数を見つけることです。 二分木 −は、各ノードに最大2つの子(左の子と右の子)を持つツリーデータ構造です。 高さバランスのとれた二分木 −は、すべてのノードの2つのサブツリーの深さが1または0だけ異なるバイナリツリーとして定義されます。これは、すべてのノードの左側のサブツリーと右側のサブツリーの高さであり、最大差は1です。 次の図には、高さh=3で可能な高さのバランスが取れた二分木が含まれています。 入力 Height H=2 出力 Count of Balanced Binary Trees