ホームページ >バックエンド開発 >C++ >連続する 2 つの 0 を 1 つの 1 に繰り返し置き換えることにより、指定されたバイナリ文字列を等しくします。

連続する 2 つの 0 を 1 つの 1 に繰り返し置き換えることにより、指定されたバイナリ文字列を等しくします。

WBOY
WBOY転載
2023-09-01 15:13:06815ブラウズ

連続する 2 つの 0 を 1 つの 1 に繰り返し置き換えることにより、指定されたバイナリ文字列を等しくします。

どのプログラミング言語でも、バイナリ文字列は文字 0 と 1 の集合です。各段階で、バイナリ文字列は、文字列にこれら 2 つの文字のみを含めることができるというアプローチに従います。

連続文字列内の文字は、インデックスの差が 1 である文字を指します。 2 つのインデックス i と j を考えてみましょう。 |j-i| = 1 の場合、それらは連続であると言われます。

C では、2 つの文字列が同等である場合、次のことを意味します:

  • 2 つの文字列内の対応する文字は同じです。

  • 文字列の長さは等しく、対応するインデックスの文字は重複します。

問題のステートメントを説明するためのいくつかの例は次のとおりです -

例例

str1 - "10001"

str2 - "101"

###解決-###

str1 を str2 に変換することはできません。これは、str1 を変換して同等の文字列 str2 を作成するプロセスで、str1 が「1011」、str2 が「101」として取得されるためです。

例 2 - 次の入力を考えてみましょう -

str1 - "001"

str2 - "11"

###解決-###

str1 は、最初の 2 つのゼロを 1 に変更することで str2 に変換できます。

C で文字マッチングと文字列トラバーサルを使用すると、次の問題を解決できます。

###アルゴリズム###

ステップ 1

- 2 つのポインター i と j を使用して、それぞれ文字列 s1 と s2 を同時に反復します。

  • ステップ 2 - 両方のインデックスの文字が一致する場合、i および j ポインターをインクリメントします。

  • ステップ 3 -文字が等しくない場合は、i 番目と (i 1) 番目のインデックスの文字が「0」であり、j 番目のインデックスの文字が「0」であるかどうかを確認します。 -th インデックス '1' かどうか。

  • ステップ 4 - そのような状況が存在する場合は、変換を実行できます。両方の 0 が 1 に変換されるため、i ポインタは 2 位置ずつインクリメントされ、j は 1 インデックス位置ずつインクリメントされます。

  • ステップ 5 - 文字が等しくなく、上記の状況が存在しない場合、変換は実行できません。

  • ステップ 6 -ポインター i と j の両方が終了位置に正常に到達した場合、s1 を s2 に変換できます。

  • ###例###

    次のコード スニペットは 2 つのバイナリ文字列を入力として受け取り、指定された条件に基づいた単純な文字置換によって 2 つの文字列が等価であるかどうかを確認します。 リーリー ###出力### リーリー ###結論は### このメソッドは入力文字列を文字ごとに効果的に比較できるため、時間計算量は O(min(文字列長)) です。文字列トラバーサルは、文字列の問題を解決するための重要な側面です。

以上が連続する 2 つの 0 を 1 つの 1 に繰り返し置き換えることにより、指定されたバイナリ文字列を等しくします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。