ホームページ >バックエンド開発 >C++ >バイナリ文字列内のすべてのゼロを削除するために必要な、隣接しないペアの反転の最小数

バイナリ文字列内のすべてのゼロを削除するために必要な、隣接しないペアの反転の最小数

WBOY
WBOY転載
2023-09-04 13:09:06756ブラウズ

バイナリ文字列内のすべてのゼロを削除するために必要な、隣接しないペアの反転の最小数

バイナリ文字列では、隣接するビットのペアを反転すると、文字列から 1 つの 0 を簡単に削除できます。ただし、バイナリ文字列からすべての 0 を削除する必要がある場合は、隣接しないビット ペアも反転する必要がある場合があります。この記事では、バイナリ文字列からすべての 0 を削除するために必要な、隣接しないペアの反転の最小数を決定する方法について説明します。

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

この問題を解決するために、単純な貪欲アルゴリズムを使用します。考え方は、常に互いに最も遠く離れており、その間に少なくとも 1 つの 0 が含まれるビットのペアを選択することです。次に、これら 2 つのビットを反転して、文字列から 0 を効果的に削除します。すべての 0 が削除されるまで、このプロセスを繰り返します。

次に、このアルゴリズムを C で実装してみましょう。

###例### リーリー ###出力### リーリー

コードの説明

上記のコードは、バイナリ文字列を入力として受け取り、文字列からすべての 0 を削除するために必要な、隣接しないペアの反転の最小数を計算します。次に、コードを詳しく見てみましょう。

まず、バイナリ文字列を入力として受け取り、それを文字列変数 "s" に保存します。また、文字列のサイズを整変数「n」に保存します。

リーリー

次に、文字列内の 0 の数を格納するために変数「cnt」を初期化します。次に、for ループを使用して文字列を反復処理します。 0 が出現するたびに、0 のカウントをインクリメントし、次の 2 ビットも 0 であるかどうかを確認します。その場合は、インデックスを 2 増やしてビットのペアを反転します。それ以外の場合は、インデックスを 1 ずつ増やして、隣接するビット ペアのみを反転します。

リーリー

最後に、文字列からすべての 0 を削除するために必要な、隣接しないペアの反転の数を出力します。

リーリー

テストケースの例

バイナリ文字列「100101000」について考えてみましょう。この文字列からすべての 0 を削除するために必要な、隣接しないペアの反転の最小数は、上記のアルゴリズムを使用して計算できます。

まず、位置 2 で 0 に遭遇します。 (1,3) ペアを反転して、文字列「110101000」を取得します。次に、位置 5 で次の 0 に遭遇します。 (1,7) ペアを反転して、文字列「111101000」を取得します。次に、位置 8 で次の 0 に遭遇します。 (1,9) ペアを反転して、文字列「111111000」を取得します。これで、文字列からすべての 0 が削除されました。

文字列からすべての 0 を削除するために必要な非隣接ペアの反転の数は 3 です。これを確認するには、入力文字列「100101000」に対して上記の C コードを実行します。

###結論は###

この記事では、バイナリ文字列からすべての 0 を削除するために必要な、隣接しないペアの反転の最小数を決定する方法について説明しました。シンプルな貪欲アルゴリズムを使用してこの問題を解決し、C コードで実装します。また、アルゴリズムがどのように機能するかを説明するサンプル テスト ケースも提供します。

以上がバイナリ文字列内のすべてのゼロを削除するために必要な、隣接しないペアの反転の最小数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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