ホームページ >バックエンド開発 >C++ >指定された制約の下で N 回の操作で文字列 'S' から N 個の文字を削除した後の値を検索します

指定された制約の下で N 回の操作で文字列 'S' から N 個の文字を削除した後の値を検索します

王林
王林転載
2023-08-26 22:29:181388ブラウズ

指定された制約の下で N 回の操作で文字列 S から N 個の文字を削除した後の値を検索します

文字列の使用仕様は何ですか?

指定された文字列 S に関連する特定の課題を解決します。文字列 S には英小文字のみが含まれており、文字を削除する場合は特定の制約に従う必要があります。

指定された制約は -

です
  • 文字列 S

  • に小文字の英字が含まれています
  • 文字列内に複数回出現する文字のみを削除できます。

  • 連続した文字のみ削除できます。次の手順を使用して、文字列 S から文字 -

  • を削除できます。
  • 文字列 S を反復処理するときに複数回出現するすべての文字を検索します。文字ごとに文字列 S を再度反復して、連続して出現する文字をすべて検索します。

  • 文字の連続出現数が反復回数以上の場合、最初の N 文字の出現を削除します。

  • すべての反復が完了するまで、ステップ 2 と 3 を続けます。

最後に、最後の文字列 S を返すことで、N 回の操作後に N 文字を削除した後の文字列の値を見つけることができます。

###文法###

このトピックは、特定の文字列に対して特定の数の操作を実行することによる操作に関するコーディングの質問です。操作ごとに、文字列内の最も一般的な文字が削除され、残りの各文字の頻度が更新されます。この操作を N 回実行した後、残りの各文字の頻度を 2 乗して合計することで、文字列の最終値が計算されます。この問題の目標は、文字列と数値 N を入力として受け取り、指定された制約に従って N 回の操作を実行した後に文字列の最終値を出力するプログラムを作成することです。

以下は、指定された制約の下で文字列 S の N 文字を削除する N 回の操作の後に値を見つける関数の構文です -

リーリー

この関数は 2 つのパラメータを受け入れます -

  • n

    - 実行される操作の数を表す整数。

  • s

    - 入力文字列を表す文字列。

  • この関数は、まず配列を使用して、入力文字列内の各文字の頻度を計算します。次に、この頻度配列は降順にソートされ、N 回実行されます。各操作で、最も一般的な文字の頻度が減り、頻度配列が再度ソートされます。

最後に、この関数は、ソートされた頻度配列内の各文字の二乗頻度を合計することによって文字列の値を計算し、それを整数として返します。

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

N 文字の削除処理の後、アルゴリズムは次の制約の下で文字列の値を計算します。入力は数値 N と文字列 S で構成されます。

ステップ 1
    - 配列を使用して、入力文字列内の各文字の頻度を決定します。
  • ステップ 2
  • - この周波数配列を降順に並べ替えます。
  • ステップ 3
  • - N 回の操作を実行します。各操作により、頻度配列内の最も頻度の高い文字の頻度が減ります。
  • ステップ 4
  • - 周波数配列を再配置します。
  • ステップ 5
  • - 並べ替えられた頻度配列内の各文字の二乗頻度を加算して、文字列の値を決定します。
  • ステップ 6
  • - N 回の操作の後、文字列の値は二乗の合計になります。
  • この手法が機能するのは、この問題では入力文字列 S から N 個の文字を削除する必要があるためです。これは N 個の操作を実行するようなもので、各操作で文字列内の最も一般的な文字が 1 回削除されます。タスクの制約により、実際に文字列から文字を削除することはできないため、各操作の頻度配列内の最も一般的な文字の頻度を減らすことによってこの操作をシミュレートする必要があります。

  • 従うべき方法

方法1

コードを使用して、サンプル文字列 S とさまざまな操作 N を初期化します。ループ内の各操作の後、次の文字より大きい最初の文字が削除されます。削除しない場合は、最後の文字が削除されます。すべての操作が完了すると、文字列の最終値が出力されます。

ここで、コードは N が文字列 S の長さ以下であることを前提としています。 N が S より長い場合、コードは期待どおりに実行されません。

例 1

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

方法 2

このコードでは、まず配列を使用して、入力文字列内の各文字の頻度を決定します。次に、N 個の操作を実行して、各操作で最も一般的な文字の頻度を減らし、頻度配列を再度並べ替えます。次に、この周波数配列を降順に並べ替えます。

文字列の値は、ソートされた頻度配列内の各文字の二乗頻度を加算することによって最終的に決定されます。

例 2

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

要約すると、直接的な手法を使用して N 回の操作後に値を取得することができ、これにより、上記の制約の下で文字列 "S" から N 個の文字を削除できます。まず、頻度配列を初期化して、文字列内の文字数を追跡しましょう。 N 個の文字を削除したら、頻度配列から最大数の文字を削除するプロセスを繰り返すことができます。このプロセスは合計 N 回繰り返すことができます。

この方法を使用すると、N 回の操作 (N 文字の削除を含む) の後で文字列「S」の値を迅速に決定できます。この方法にはソート段階が存在するため、このソリューションの時間計算量は O(N logN) であり、ほとんどの実用的なアプリケーションでは許容可能です。

以上が指定された制約の下で N 回の操作で文字列 'S' から N 個の文字を削除した後の値を検索しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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