この記事では、一意の文字を含む文字列の最大化パーティションの長さを見つける方法の問題を検討します。まず問題の内容を理解してから、それぞれのアルゴリズムや時間計算量を含めて、この問題を解決するための素朴で効率的な方法を研究します。最後に、C でソリューションを実装します。
###問題文###
指定された文字列を、文字列内の各文字が 1 つの部分文字列のみに表示されるように、その文字列をできるだけ多くの部分文字列に分割します。これらの最大化分割の長さを返します。
単純な方法
素朴なアプローチは、文字列を反復処理し、各文字の最後の出現を記録することです。次に、文字列を再度繰り返し、現在の文字が最後に見つかったときにパーティションを作成します。
アルゴリズム (単純)
配列を初期化して、文字列内の各文字の最後の出現を格納します。
文字列をループし、各文字の最後の出現を記録します。
パーティションの長さを格納するベクトルを初期化します。
文字列を再度ループし、現在の文字が最後に見つかったときにパーティションを作成します。 -
C コード (プレーン)
Example
の中国語訳は次のとおりです:
Example
リーリー
###出力###
リーリー
時間計算量 (単純なアルゴリズム)
- O(n)、n は文字列の長さです。
効率的な方法
効率的な方法は単純な方法に似ていますが、文字列を 2 回繰り返す代わりに、1 回の繰り返しで各文字の最後の出現を同時に記録するパーティションを作成できます。
アルゴリズム (効率的)
配列を初期化して、文字列内の各文字の最後の出現を格納します。
パーティションの長さを格納するベクトルを初期化します。
文字列を走査し、各文字の最後の出現を記録し、現在の文字の最後の出現が見つかったときにパーティションを作成します。
-
C コード (効率的)
例
リーリー
###出力###
リーリー
時間計算量 (効率的) - O(n)、n は文字列の長さです。
###結論は###
この記事では、一意の文字を含む文字列を検索するためにパーティションの長さを最大化する問題について検討します。この問題を解決するためのシンプルかつ効率的な方法と、そのアルゴリズムと時間の複雑さについて説明します。この効率的なアプローチでは、各文字の最後の出現の記録とパーティションの作成を 1 回の繰り返しで組み合わせて、最適化されたソリューションを提供します。どちらの方法も時間の計算量は同じですが、効率的な方法の方が反復回数が少なくなります。
以上が文字列内の各文字が部分文字列に現れるような文字列の最大分割長の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。