ホームページ >バックエンド開発 >C++ >長さ K の各部分文字列に一意の文字のみが含まれるように文字を挿入して文字列を変更します。

長さ K の各部分文字列に一意の文字のみが含まれるように文字を挿入して文字列を変更します。

WBOY
WBOY転載
2023-08-29 12:13:061152ブラウズ

長さ K の各部分文字列に一意の文字のみが含まれるように文字を挿入して文字列を変更します。

文字列を処理するときの一般的なタスクは、文字列が特定の条件を満たしていることを確認することです。条件の 1 つは、文字列内の長さ K の各部分文字列に一意の文字のみが含まれていることを確認することです。これは、データのエンコード、文字列操作、暗号化に関連する問題における一般的な要件です。

###問題文###

私たちが解決しようとしている問題は次のように言えます -

文字列 str と整数 K が与えられた場合、文字列内の長さ K の各部分文字列が一意の文字のみを含むように文字を挿入して文字列を変更します。

提案される解決策

この問題は、スライディング ウィンドウ テクノロジを使用することで解決できます。これは、より大きな配列または文字列内の連続する部分配列または部分文字列のプロパティを効率的にチェックする方法です。

このアルゴリズムのステップについて詳しく説明しましょう -

    空の unowned_map (ハッシュマップ) を初期化して、現在の部分文字列内の文字の頻度を追跡します。
  • サイズ K のスライディング ウィンドウを使用して、文字列内の文字を反復処理します。
  • 文字がすでにハッシュマップ内にある場合は、一意の文字が取得されるか、スライディング ウィンドウのサイズが K になるまで、新しい文字を挿入します。
  • スライディング ウィンドウを 1 文字移動し、文字列の終わりに達するまでこのプロセスを繰り返します。
  • このアルゴリズムの時間計算量は O(n) です。ここで、n は文字列の長さです。これは、文字列内の各文字を 1 回だけ反復処理するためです。

Example

の中国語訳は次のとおりです:

Example

上記のアルゴリズムを実装する C コードを見てみましょう -

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

このコードが繰り返し文字に遭遇すると、英小文字がランダムに挿入されます。

テストケースの例

この問題をよりよく理解するために例を挙げてみましょう。

文字列 str = "abcabc" および K = 3 について考えてみましょう。

コードを実行すると、abcxyzabc のような結果が得られる場合があります。 3 文字の部分文字列は abc、bcx、cxy、xyz、yza、zab、abc で、すべて一意の文字が含まれています。

- ランダムな文字を挿入しているため、結果は異なる場合があります。

###結論は###

要約すると、このアルゴリズムは、長さ K の各部分文字列が一意の文字を持つように文字列を変更する方法を提供します。これは、スライディング ウィンドウ テクノロジの力と C の柔軟性を活用した効率的なソリューションです。この概念を完全に理解するために、さまざまな文字列と K 値を試してみることをお勧めします。

以上が長さ K の各部分文字列に一意の文字のみが含まれるように文字を挿入して文字列を変更します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

関連記事

続きを見る