最小のオペランドで 1 ビットを除くすべてのビットを反転して、指定されたバイナリ文字列を別のバイナリ文字列に変換します。
この問題では、文字列の文字を反転して、あるバイナリ文字列を別のバイナリ文字列に変換する必要があります。設定されたビットを保存し、他のビットを反転することができます。これを行うことで、別の文字列を実装するための合計操作を計算する必要があります。
指定された文字列内の「01」と「10」のペアの合計数に基づいて問題を解くことができます。
問題文- バイナリ文字列を表す、「0」と「1」の文字を含む、str1 と str2 という同じ長さの 2 つの文字列が与えられています。次の手順を実行して、文字列 str1 を str2 に変換する必要があります。
任意の設定ビットを選択し、他のすべてのビットを反転できます。ビットの反転とは、「0」を「1」に、「1」を「0」に変換することを意味します。
str1 を str2 に変換できない場合は、-1 を出力します。
-
最初の操作では、2 番目のインデックスの「1」を変更せずに保持し、str1 内の他のすべての文字を反転します。したがって、str1 は 111110000 になります。
2 番目の操作では、インデックス 0 の「1」を変更せずに保持し、他のすべての文字を反転します。したがって、str1 は 100001111 になります。
- 最後の操作では、5 番目のインデックスに「1」を保存します。したがって、str1 は 011111000 になります。
-
- 説明
- str1 には保存する「1」文字が含まれていないため、str1 を str2 に変換できません。
######入力###### リーリー ######出力###### リーリー - 説明
- str1 を str2 に変換できません。
方法1
観察を通じて問題を解決できます。観察によれば、任意の 1 つのセットビットを保持して 2 つの操作を実行すると、同じ文字列が得られることがわかります。したがって、文字列を変更するには、別の 1 インデックスを選択する必要があります。 また、01 のペアを 10 に変換するには 2 つの操作を実行する必要があります。たとえば、「01」は「1」のままにします。したがって、「11」が得られます。その後、「11」の 0 番目のインデックスを「1」のままにして、「10」を取得します。
答えを得るには、01 (0 -> str1、1 -> str2) と 10 (1 -> str1、0 -> str2) が同じである必要があります。そうでなければ、答えは存在しないと言えます。 「01」を「10」に 2 回の操作で変換できるため、主な目標は「01」と「10」のペアを最小限に抑えることです。
###アルゴリズム###ステップ 1- totalOperatrions() 関数を定義して、str1 を str2 に変換するために必要な操作の数を計算します。
ステップ 1.2 - count10 変数と count01 変数を初期化して、「01」と「10」のペアを文字列に格納します。
ステップ 1.3 - 文字列をループし、両方の文字列の 01 と 10 のペアを数えます。
ステップ 1.4- count10 と count01 が同じ場合、2*count10 を返します。それ以外の場合は、-1 が返されます。
ステップ 2- minimumOperations() 関数を定義して、str1 を str2 に変換するために必要な最小限の操作を計算します。
ステップ 3- 「ans」を最大値で初期化します。
ステップ 4- 元の文字列を使用して totalOperations() 関数を呼び出し、結果を「operation1」変数に保存します。戻り値が -1 に等しくない場合、ans と演算 1 の最小値が ans に格納されます。
ステップ 5- 次に、01 と 10 のペアを最小化するように文字列を変更します。したがって、stringModification()関数を定義します。
ステップ 5.1 - この関数では、文字列内の「1ch」の最初のペアを見つけて、パラメータとして「ch」を渡します。これは「0」または「1」です。したがって、ペアは 1 -> str1 および ch -> str のようになります。
ステップ 5.2- 「1ch」ペアが見つからない場合は、false を返します。
ステップ 5.3 - 「1ch」ペアが見つかった場合は、そのペアを変更せずに維持し、str1 の他の文字を反転します。
ステップ 6 - stringModification 関数を実行して、「11」のペアを変更せずに維持し、他の文字を反転します。その後、 totalOperations() 関数が再度呼び出され、str1 を str2 に変換するために必要な操作が検索されます。
ステップ 7- 操作 2 が -1 に等しくない場合は、「ans」に最小値を格納するか、「ans」に「1 操作 2」を格納します。ここでは、1 回の操作で文字列を変更したため、1 を追加しました。
ステップ 8 - 最初の「10」ペアを変更しないで文字列を変更し、オペランドを計算します。再度、最小値を「ans」に代入します。
ステップ 9- 「ans」が INT_MAX に等しい場合、-1 を返します。それ以外の場合は、ans を返します。
###例### リーリー ###出力### リーリー時間計算量- O(N)。stringModification() 関数と totalOperations() 関数で文字列を反復処理するためです。
スペースの複雑さ- O(1)。余分なスペースを使用せずに同じ文字列を変更するためです。
コードの主な目的は、文字列を変更して操作を最小限に抑えた後、指定された文字列内の 01 と 10 のペアの数を減らすことです。プログラマーはさまざまな入力を使用して、答えを理解しようとします。
以上が最小のオペランドで 1 ビットを除くすべてのビットを反転して、指定されたバイナリ文字列を別のバイナリ文字列に変換します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









USTERC20をTRC20ネットワークに変換する方法を段階的に説明します。これは、多くの人が取引手数料を節約するためにUSDTステーブルコインをイーサリアムネットワークからトロンネットワークに移動することを好むためです。したがって、ERC-20 トークンを TRC-20 に変換したい場合は、このチュートリアルが役立つと思います。 ERC-20 と TRC-20 の違い ERC-20 トークンと TRC-20 トークンは、それぞれイーサリアム ネットワークとトロン ネットワークに基づくトークンを表します。 2 つのネットワークには、主に以下の点でいくつかの違いがあります。 まず、イーサリアム ネットワークは混雑と高額なガス料金に直面することが多く、これがトランザクションの遅延や高額なトランザクション コストにつながる可能性があります。それに比べて、Tron ネットワークは比較的混雑が少ないです。

全角の英字を半角に変換する実践的なヒント. 現代の生活において私たちは英語の文字に触れる機会が多く、パソコンや携帯電話などを使用する際に英語の文字を入力する必要が多くなります。ただし、場合によっては全角の英字が登場するため、半角形式を使用する必要があります。では、全角の英字を半角に変換するにはどうすればよいでしょうか?ここでは、いくつかの実践的なヒントを紹介します。まず、全角英数字とはインプットメソッド内で全角の位置を占める文字のことを指しますが、半角英数字は全角の位置を占めます。

この記事では、OpenDocumentTextDocument (ODT) ファイルを Microsoft Word (Docx、DOC など) に変換する方法を説明します。フォーマット。 Windows 11/10 で ODT を Word に変換する方法 Windows PC で ODT ドキュメントを DOC または DOCX 形式に変換する方法は次のとおりです: WordPad または Word を使用して ODT を Word に変換する 最初に紹介する方法は、WordPad または Word を使用することです。 MicrosoftWord を使用して ODT を Word に変換します。これを実現する手順は次のとおりです。 まず、[スタート] メニューを使用してワードパッド アプリを開きます。さあ、ここに行ってください

仮想マシン (VM) を物理マシンに変換することは、仮想インスタンスおよび関連するアプリケーション ソフトウェアを物理ハードウェア プラットフォームに移行するプロセスです。この変換は、オペレーティング システムのパフォーマンスとハードウェア リソースの使用率を最適化するのに役立ちます。この記事は、この変換を行う方法を詳しく説明することを目的としています。仮想マシンから物理マシンへの移行を実装するにはどうすればよいですか?通常、仮想マシンと物理マシン間の変換プロセスは、サードパーティ ソフトウェアによって仮想マシンの外部で実行されます。このプロセスは、仮想マシンの構成とリソースの転送を含む複数の段階で構成されます。物理マシンを準備する: 最初のステップは、物理マシンが Windows のハードウェア要件を満たしていることを確認することです。変換プロセスにより既存のデータが上書きされるため、データを物理マシンにバックアップする必要があります。 *システムイメージを作成するための管理者権限を持つ管理者アカウントのユーザー名とパスワード。仮想になります

AI ファイルは Adobe Illustrator (略して AI) ソフトウェアで作成されたベクター グラフィック ファイルを指しますが、CDR ファイルは CorelDRAW ソフトウェアで作成されたベクター グラフィック ファイルを指します。これら 2 つのソフトウェアは異なる製造元によって開発されているため、ファイル形式が異なるため、相互に直接変換することはできません。ただし、いくつかの方法で AI ファイルを CDR ファイルに変換できます。よく使われる変換方法を以下に紹介します。ステップ 1: AI ファイルを EPS 形式でエクスポートする AdobeIllust

Golang の時間変換: タイムスタンプを文字列に変換する方法 Golang では、時間操作は非常に一般的な操作の 1 つです。表示や保存を容易にするために、タイムスタンプを文字列に変換する必要がある場合があります。この記事では、Golang を使用してタイムスタンプを文字列に変換する方法と、具体的なコード例を紹介します。 1. タイムスタンプと文字列の変換 Golang では、タイムスタンプは通常、1970 年 1 月 1 日から現在時刻までの秒数を表す整数の形式で表現されます。文字列は

この記事では、PHPの月を英語の月に変換する方法と具体的なコード例を詳しく紹介します。 PHP 開発では、デジタル月を英語の月に変換する必要がある場合があります。これは、一部の日付処理またはデータ表示シナリオでは非常に実用的です。以下に実装原理、具体的なコード例、注意点について詳しく説明します。 1. 実装原理 PHP では、DateTime クラスと format メソッドを使用して、デジタル月を英語の月に変換できます。日付

QQ Music を使用すると、誰でも映画を楽しんだり、退屈を解消したりすることができます。このソフトウェアを毎日使用して、あなたのニーズを簡単に満たすことができます。誰もが聴くことができる高品質の曲が多数用意されています。ダウンロードして保存することもできます。次回聴くときはインターネット接続は必要ありません。ここでダウンロードした曲は MP3 形式ではないため、他のプラットフォームでは使用できません。メンバーシップ曲の有効期限が切れると、再度聴くことはできません。そのため、 , 多くの友人が曲を MP3 形式に変換したいと考えています。ここでは、編集者が説明します。誰もが使用できるように方法を提供しています。 1. コンピュータで QQ Music を開き、右上隅の [メインメニュー] ボタンをクリックし、[オーディオトランスコーディング] をクリックし、[曲を追加] オプションを選択して、変換する必要がある曲を追加します; 2. 追加した後、曲をクリックして [mp3] に変換を選択します
