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

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

[[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バイアス

ブログ    

推薦する

アルコールで動く88mgのマイクロロボットは2時間連続稼働可能

マイクロロボットは極めて狭い空間でも移動できますが、これは人間や従来のロボットでは不可能なことです。...

...

...

...

人力資源社会保障省:人工知能人材の不足は500万人を超える

最近、人力資源・社会保障省は、新しい職業である人工知能工学・技術人材の現在の雇用状況に関する分析レポ...

Daguan Data: NLP の概要と自動テキスト分類アルゴリズムの詳細な説明

自然言語処理は人工知能の分野で常に重要なトピックであり、2018年も話題となりました。大量のテキスト...

AI を活用したソーシャル メディア マーケティングの 10 大ルール

マーケティング担当者は、ブランド認知度を高め、顧客にとって適切なターゲット ユーザーを見つけるために...

5G の出現は AI 連合学習にどのような影響を与えるでしょうか?

開発チームが AI ツールの作成に奔走する中、エッジ デバイスでのアルゴリズムのトレーニングが一般的...

1 つのニューロンには 5 ~ 8 層のニューラル ネットワークがあります。ディープラーニングの計算の複雑さは生物学によって克服されています。

人工知能の開発にはまだまだ長い道のりが残っているようです。エルサレムのヘブライ大学の研究者らは、単一...

技術専門家によると、これらの15の仕事は決してAIに置き換えられないだろう

人工知能と機械学習の台頭により、企業はこれまでにない方法でプロセスを自動化し、生産性を向上させる機会...

傲慢か偏見か?AIはあなたの美的観念に影響を与えていますか?

数日前、TikTokで、ある親がTikTokの特殊効果を使って子供の年齢と容姿を計測する動画を見まし...

プリンストン DeepMind は数学を使用して、LLM はランダムなオウムではないことを証明します。 「規模が大きいほど能力が強くなる」には理論的根拠がある

今日の物語の主人公は、サンジーヴ・アローラとアニルド・ゴヤルという二人の科学者です。アローラ氏はプリ...

...

年次レビュー: 2017 年の「愚かな」 AI 製品 8 つ

2017年は「人工知能実装元年」と言われています。 AIは人々の生活の隅々にまで浸透しており、AIハ...