バイナリ文字列がC++のどこにでも2回連続して出現するかどうかを確認します
ここで、別の興味深い問題が発生します。次の基準を持つ文字列を受け入れるコードを作成する必要があります。
- 連続する1のすべてのグループは、長さが2である必要があります
- 連続する1のすべてのグループは、1つ以上の0の後に表示される必要があります
0110のような文字列があると仮定します。これは、001110、010が無効であるかどうかに関係なく、有効な文字列です。
ここでのアプローチは単純です。 1の出現を見つけて、それが部分文字列011の一部であるかどうかを確認する必要があります。条件が失敗した場合、任意の部分文字列に対してfalseを返し、それ以外の場合はtrueを返します。
例
#include <bits/stdc++.h>
using namespace std;
bool isValidStr(string str) {
int n = str.length();
int index = find(str.begin(), str.end(), '1') - str.begin();
if (index == 0) //when the string starts with 1, then return false
return false;
while (index <= n - 1) {
if (str[index - 1] != '0') // If 1 doesn't appear after an 0
return false;
if (index + 1 < n && str[index + 1] != '1') // If '1' is not succeeded by another '1'
return false;
if (index + 2 < n && str[index + 2] == '1') // If sub-string is of the type "0111"
return false;
if (index == n - 1) // If str ends with a single 1
return false;
index = find(str.begin() + index + 2, str.end(), '1') - str.begin();
}
return true;
}
int main() {
string str = "011000110110";
if(isValidStr(str)){
cout << str << " is a valid string";
} else {
cout << str << " is NOT a valid string";
}
} 出力
011000110110 is a valid string
-
C ++のバイナリ循環配列の最大連続1(またはゼロ)
循環配列が与えられます。循環配列は、最初の要素が最後の要素の隣にある場合を考慮した配列です。キューを実装するために使用されます。したがって、最大数を数える必要があります。その配列内の連続する1または0の数。 例を挙げて理解しましょう。 入力 − arr [] ={1,1,0,1,0,1,0,1,1,1} 出力 −最大連続1は5です。または最大連続0は1です。 説明 − Arr []インデックス7から9まで、次にインデックス0と1。1は5です。連続する0はありませんが、1です。 入力 − arr [] ={0,0,0,1,0} 出力 −最大連続1は1です。または、連続する最大0は
-
C++で2つのバイナリ文字列を追加するプログラム
2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},