このチュートリアルでは、指定されたバイナリ文字列のすべての 1 と 0 を 2 つの半分に分割する必要があります。ここでは、指定された文字列から部分文字列を取得し、それを反転して 0 と 1 の異なる部分を分離する必要があります。最終的には、部分文字列を 1 と 0 を半分に分割するために必要な反転の合計数を計算する必要があります。
問題文 - 偶数長のバイナリ文字列が与えられています。指定された文字列から部分文字列を複数回取得し、それを反転して 2 つの半分に分割する必要があります。最後に必要な反転の合計数を出力する必要があります。
###例###
リーリー
リーリー
イラスト
文字列が半分に分割されているため、反転は 0 回必要です。
リーリー
リーリー
イラスト
まず、5 番目のインデックスから始まる長さ 2 の部分文字列を取得し、それを反転します。結果の文字列は 0011110000 になります。
その後、長さ6の文字列を先頭から取り出して反転します。結果の文字列は 1111000000-
になります。
リーリー
リーリー
イラスト
長さ 2 の文字列を最初のインデックスから反転します。結果の文字列は 001101 になります。
次に、長さ 3 の文字列を 2 番目のインデックスから逆にします。最後の文字列は 000111 になります。 -
方法1
このメソッドは、隣接する個別の要素の合計数をカウントします。その後、必要な反転の総数は count / 2 であると言えます。
サンプル入力をデバッグして理解しましょう。
リーリー
したがって、異なる隣接する要素の合計数は 4 です。ここで、str[1] != str[2]、str[4] != str[5]、str[5] != str[6]、および str[6] != str[7]。
したがって、カウント値は 4 で、答えは count/2 となり、2 に等しくなります。
###アルゴリズム###
ステップ 1
- 「cnt」変数を 0 に初期化します。 -
ステップ 2 - for ループを使用して、文字列を反復処理します。 -
ステップ 3 -for ループで、現在の要素が前の要素と等しくない場合は、「cnt」変数の値を 1 増やします。 -
ステップ 4 -「cnt」の値が奇数の場合、(cnt -1) /2 を返します。それ以外の場合は、cnt/2 を返します。 -
Example
の中国語訳は次のとおりです: Example
リーリー
###出力###
リーリー
文字列を反復処理するため、時間計算量 - O(N)。
カウントの保存に定数スペースを使用するため、スペースの複雑さ - O(N)。
ここでは、2 つの異なる隣接する要素が見つかるたびに反転する必要があるロジックを使用します。さらに、1 回の逆演算で 2 つの要素を設定できるため、結果の値として count/2 を返します。
以上がバイナリ文字列内の 1 と 0 を別々の半分に分割しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。