データ構造とアルゴリズム: 文字列の分割とバランス

データ構造とアルゴリズム: 文字列の分割とバランス

[[441873]]

バランスの取れた文字列を分割する

LeetCode の問題へのリンク: https://leetcode-cn.com/problems/split-a-string-in-balanced-strings

バランスの取れた文字列では、「L」文字と「R」文字の数は同じです。

バランスの取れた文字列 s が与えられた場合、それをできるだけ多くのバランスの取れた文字列に分割するように求められます。

注意: 分割によって取得される各文字列はバランスの取れた文字列である必要があります。

分割によって取得できるバランスの取れた文字列の最大数を返します。

例1:

  • 入力: s = "RLRRLLRLRL"
  • 出力: 4
  • 説明: は「RL」、「RRLL」、「RL」、「RL」に分割でき、各部分文字列には同じ数の「L」と「R」が含まれます。

例2:

  • 入力: s = "RLLLLRRRLR"
  • 出力: 3
  • 説明: は「RL」、「LLLRRR」、「LR」に分割でき、各部分文字列には同じ数の「L」と「R」が含まれます。

例3:

  • 入力: s = "LLLLRRRR"
  • 出力: 1
  • 説明: s は「LLLLRRRR」としてのみ残ります。

例4:

  • 入力: s = "RLRRRLLRLL"
  • 出力: 2
  • 説明: は「RL」、「RRRLLRLL」に分割でき、各部分文字列には同じ数の「L」と「R」が含まれます。

アイデア

この質問は複雑に思えるかもしれませんが、実は非常に単純な貪欲問題です。貪欲に関しては、貪欲アルゴリズムの詳細な説明をここに載せています。これは知っておくべきです!

前から後ろへトラバースし、バランスの取れた部分文字列に遭遇する限り、カウントは +1 となり、1 回トラバースできます。

局所最適: 前から後ろへ走査し、バランスの取れた部分文字列に遭遇するたびにカウントする

グローバル最適性: 最もバランスの取れた部分文字列がカウントされます。

局所最適性は、全体最適性につながる可能性があります。反例を挙げられない場合は、貪欲性を試してください。

たとえば、LRLR 自体はバランスの取れた部分文字列ですが、LR に遭遇すると分割される可能性があります。

C++ コードは次のとおりです。

  1. クラスソリューション{
  2. 公共
  3. int balancedStringSplit(文字列 s) {
  4. int結果 = 0;
  5. 整数 カウント= 0;
  6. ( int i = 0; i < s.size ( ) ); i++) {
  7. s[i] == 'R'の場合カウント++;
  8. それ以外 カウント--;  
  9. count == 0 の場合、結果 ++;
  10. }
  11. 結果を返します
  12. }
  13. };

拡大する

生徒の中には、あなたの推論は信頼できず、数学的な証明がないと考える人もいるかもしれません。どうすればそれが合理的だと言えるのでしょうか? 局所最適が全体最適につながることをどのように示すことができるのでしょうか?

数学的な証明には、一般的に 2 つの方法があります。

  • 数学的帰納法
  • 反証による証明

厳密な数学的証明を本当に提供したい場合、それは実際のところ練習問題や面接の範囲を超えています。

したがって、貪欲問題の思考プロセスは次のようになります。局所最適解が大域最適解につながる可能性がある場合は、反例を挙げてみます。反例を挙げることができない場合は、貪欲解を試します。

その他の言語

ジャワ

  1. クラスソリューション{
  2. 公共  int balancedStringSplit(文字列 s) {
  3. int結果 = 0;
  4. 整数 カウント= 0;
  5. ( int i = 0; i < s.length(); i++) {
  6. s.charAt(i) == 'R'の場合カウント++;
  7. それ以外 カウント--;  
  8. count == 0 の場合、結果 ++;
  9. }
  10. 結果を返します
  11. }
  12. }

JavaScript

  1. var balancedStringSplit =関数(s) {
  2. let res = 0, total = 0; //res はバランスの取れた文字列の数、total は現在の"R"文字と"L"文字の差です
  3. for (let c of s){// 文字列の各文字を走査する
  4. //先頭の文字数の差は 0 なので、トラバースするときに最初に文字数の差を変更する必要があります。そうしないと、結果の数に影響します。
  5. total += c === 'R' ? 1:-1; // "R"に遭遇するとtotal++; "L"に遭遇するとtotal --  
  6. if(total === 0) res++; // 「R」と「L」の数が同じであれば、バランスの取れた文字列とみなすことができます
  7. }
  8. resを返します
  9. };

<<:  2022年の自動運転のトップ10トレンドが発表されました。データインテリジェンスシステムは、自動運転の商用化のクローズドループの鍵となるでしょうか?

>>:  知っておくべき6つのAIバイアス

ブログ    
ブログ    

推薦する

詳細な分析: AI がイノベーションを容易にする方法

開発手段。イノベーションの結果は、企業が市場のニーズを満たす新製品を継続的に設計・生産することを奨励...

...

推奨される自動化およびオーケストレーションツール10選

自動化およびオーケストレーション ネットワーク ツールは、人間のオペレーターよりも高速かつ正確にタス...

...

Facebookは再生可能エネルギー貯蔵を改善するために人工知能を活用する

Facebookとカーネギーメロン大学は、AIを使って新たな「電気触媒」を見つけようとしていると発表...

テンセントクラウドの「AIスーパーベース」特別セッションがWOTカンファレンスで発表され、技術革新がAIインフラの新たな章を導く

過去2年間、「百機種戦争」は中国で人気の技術トピックになりました。 2020年以降、中国は大型モデル...

...

...

トイレに座ってアルゴリズムを読む: わずか5行のフロイドの最短経路アルゴリズム

[[110550]]夏休みの間、シャオ・ヘンはいくつかの都市を旅行する予定です。下の図に示すように、...

Omdia の観察: 配車サービスの大手企業が自動運転から撤退するのは幸運か、それとも災いか?

市場調査会社オムディアの最新レポートによると、北米第2位の配車プラットフォームプロバイダーであるLy...

サイバーセキュリティを変える、最もホットなハッカーツール:武器化された人工知能FraudGPT

FraudGPT の「成功」は、生成 AI の武器化とハッキング技術の民主化という危険な時代の到来...

Facebook Cityは楽しいです!ドローンで遠隔地の山岳地帯にモバイルネットワークを提供

[51CTO.comからのオリジナル記事] Facebookは、インド政府および通信会社と協議し、太...

分散システム設計のための負荷分散アルゴリズム

概要分散システムの設計では、通常、サービスはクラスターに展開されます。クラスター内の複数のノードが同...

2020年に注目すべき10のAIトレンド

今後 1 年間で AI テクノロジーはどのように進化するのでしょうか。組織が注目すべき主要な AI ...