C ++で指定された文字列内の「1(0+)1」のすべてのパターンを検索します
文字列に1(0+)1のようなパターンがあるとします。ここで、(0+)は、空でない連続した1の出現を示します。すべてのパターンを見つける必要があります。パターンは重複する可能性があります。文字列は必ずしもバイナリ文字列である必要はありません。数字と小文字のみを保持できます。文字列が1101001のようなものであるとすると、そのようなパターンが2つあります。 101と1001。
この問題を解決するために、次の手順に従います-
-
文字列内のすべての文字cを繰り返し処理します
-
cが1の場合、要素が0になるまで繰り返します
-
0のストリームが終了すると、次の文字が1かどうかを確認します
-
これらの手順は、文字列の終わりに達するまで繰り返されます。
例
#include<iostream> using namespace std; int countBinPattern(string main_str) { char last_char = main_str[0]; int i = 1, counter = 0; while (i < main_str.size()) { if (main_str[i] == '0' && last_char == '1') { while (main_str[i] == '0') i++; if (main_str[i] == '1') counter++; } last_char = main_str[i]; i++; } return counter; } int main() { string str = "10010110000101"; cout << "Number of substrings of pattern 1(0+)1 is: " << countBinPattern(str); }
出力
Number of substrings of pattern 1(0+)1 is: 4
-
C++を使用して文字列の部分文字列の数を見つける
この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &
-
C++で与えられた完全な二分木のすべてのノードの合計を見つけます
完全な二分木のレベル数を表す正の整数Lがあるとします。この完全な二分木のリーフノードには、1からnまでの番号が付けられています。ここで、nはリーフノードの数です。親ノードは子の合計です。私たちの仕事は、この完璧な二分木のすべてのノードの合計を出力するプログラムを書くことです。したがって、ツリーが以下のようになっている場合- したがって、合計は30です。 よく見ると、すべてのノードの合計を見つける必要があります。リーフノードは1からnまでの値を保持しているため、式n(n + 1)/2を使用してリーフノードの合計を取得できます。これは完全な二分木であるため、各レベルの合計は同じになります