ホームページ  >  記事  >  バックエンド開発  >  すべてのバランスの取れたブラケットのサブシーケンスが空になるように削除する必要があるペアの数を計算します。

すべてのバランスの取れたブラケットのサブシーケンスが空になるように削除する必要があるペアの数を計算します。

WBOY
WBOY転載
2023-09-04 12:57:06650ブラウズ

すべてのバランスの取れたブラケットのサブシーケンスが空になるように削除する必要があるペアの数を計算します。

C コンパイラは文字列を文字の配列として扱うため、位置に基づいて文字列から文字を簡単に削除できます。文字列の最初と最後の位置で括弧が存在するかどうかを確認し、括弧を削除する必要があります。文字列を別の変数にコピーして表示できます。

C には、文字列を操作するために効率的に使用できる事前定義された関数が多数あります。 C 言語では、関数を使用して開始位置または終了位置から文字を簡単に削除できます。

文字列から左括弧と右括弧を削除します

括弧は入力文字列の一部である単一の文字であり、以下に示すロジックとアルゴリズムに従って文字列から削除できます。

文字はキーボード上で見られる任意の英数字キーであり、C の文字変数に格納されます。

() は c では括弧と呼ばれます。ユーザーが入力した文字列内のこの文字を識別し、文字列から削除する必要があります。

配列は、単一の名前と連続した番号でアドレス指定される多数の格納場所を持つ変数であり、文字列は文字の配列です。

正規表現を解くときなど、文字列から括弧を削除する必要がある状況は数多くあります。

###文法###

関数 countRemoval は、文字列 str を入力として受け取り、文字列内のすべての平衡括弧サブシーケンスを空にするために必要な削除ペアの数を表す整数値を返します。この関数は変数 count を使用して、必要な削除の数を追跡します。初期値は 0 に設定されます。また、変数 Balance を使用して、文字列内の左括弧と右括弧の数のバランスを追跡します。次に、関数は文字列の長さ全体にわたって反復処理を行い、各インデックスの文字をチェックします。文字が左括弧の場合は残高が 1 増加し、右括弧の場合は残高が 1 減ります。バランスがマイナスになる場合は、右ブラケットが余分にあり、除去の数がプラス 1 され、バランスが 0 にリセットされることを意味します。ループの後、文字列内のすべての平衡括弧サブシーケンスを空にするために必要な削除量として、残りの残高を 2 で割った値が含まれるようにカウントが更新されます。

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

ステップ 1

- null に初期化された str1、str2 を宣言します。
  • ステップ 2

    - 整数変数 len,n,i
  • を宣言する

    ステップ 3

    - コンソールから str1 を受け入れる
  • ステップ 4

    - 最初の文字が (
  • ステップ 5

    - n = 1 の場合
  • ステップ 6

    - n
  • ステップ 7

    - str2 の最後の文字が ) であるかどうかを確認します。
  • ステップ 8

    - 「はい」の場合は、\0 に置き換えます。
  • ステップ 9

    - 入力文字列のマイナス記号 () を含む str2 を出力します。
  • ###方法### 方法 1

    - ブルート フォース再帰:最初の方法では、ブルート フォース再帰を使用して、考えられるすべてのサブシーケンスを検索し、それらがバランスが取れているかどうかを確認します。サブシーケンスのバランスが取れている場合は、括弧のペアを削除し、削除された括弧のペアの数を数えます。文字列を空にするために必要なペア削除の最小数を計算します。

方法 2

- 動的プログラミング: 2 番目の方法では、動的プログラミングを使用してソリューションを最適化します。 2D DP テーブルを使用して、インデックス "i" から "j" までの部分文字列に必要な最小削除数を保存できます。文字列を反復処理し、指定された基準に基づいて DP テーブルにデータを入力します。

方法 1 暴力的な再帰 ###コード###

このコードでは、考えられるすべてのサブシーケンスの組み合わせをチェックします。その結果、指数関数的な時間計算量が発生します。入力が大きい場合、この方法は効率的ではない可能性があります。

リーリー ###出力### リーリー 方法 2 ###例###

この動的プログラミング ソリューションは、すべての平衡括弧サブシーケンスを空にするために必要な最小削除数を計算します。文字列を反復処理し、左括弧の数で 1 次元の DP テーブルを更新し、削除する最小量として最終的な DP 値を返します。

リーリー ###出力### リーリー ###結論は###

文字データ型と文字列データ型の違い、文字列区切り文字、文字列と配列の初期化方法、配列の最初の文字がインデックス 0 になる位置と最後の文字の計算など、C 言語の基本概念このプログラムで使用されています 正しい出力を得るには、1 文字が空である必要があります。

プログラム内の括弧の削除は、C プログラミングの基本的で単純な概念を実装することによって実現されます。

以上がすべてのバランスの取れたブラケットのサブシーケンスが空になるように削除する必要があるペアの数を計算します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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