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

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

[[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が新たな記録を樹立:ACL 2020に27本の論文が選出

最近、計算言語学会(ACL)は公式ウェブサイトでACL 2020の採択論文リストを発表し、合計779...

将来のAIアプリケーションには、より高速でスマートな通信インフラストラクチャが必要

[[409599]]インターネット接続が4Gから5Gへと高速化していく一方で、利用可能な帯域幅が限ら...

Meili United が VALSE カンファレンスで「ファッションをグラフィックで説明」する画像アルゴリズムの体験を共有する方法

最近、第7回ビジョンと学習セミナー(VALSE)が厦門大学で成功裏に終了しました。 VALSE は ...

人工知能、VR、音声検索、従来のマーケティングモデルを変える「三銃士」

人工知能と関連技術はマーケティングの未来を変えつつあり、仮想現実 (VR)、音声検索、人工知能はマー...

機械学習プロジェクトの 87% が失敗する 10 の理由

機械学習は、最近ニュースでよく耳にする言葉ですが、さらに多くのことを実現する可能性を秘めた技術です。...

OpenAI が GPT-4 やその他のモデルを更新し、新しい API 関数呼び出しを追加し、価格を最大 75% 引き下げ

数日前、OpenAIのCEOサム・アルトマン氏は世界ツアーのスピーチで、OpenAIの最近の開発ルー...

シリコンバレーのエンジニアの間で大人気だったこの技術共有セッションで、ディディはどんなことを話したのでしょうか?

11月19日、滴滴出行は米国の新研究オフィスで地元の科学研究者向けの技術サロンを開催した。 Did...

人工知能との競争において、カスタマーサービスと宅配業者が勝つ可能性はどれくらいでしょうか?

[[409291]]労働日報記者 イェ・ユン・チェン・ニン 写真家 チェン・ニン編集者注人工知能(...

5種類の画像注釈の紹介

[[341366]] [51CTO.com クイック翻訳] 画像内のさまざまなグラフィック領域の注釈...

農業用ドローンは熱を帯び続け、今後の開発に向けた3つの大きなトレンドが浮上

農業は国民の衣食住の問題を解決する鍵であり、国民経済の発展を促進する重要な基盤でもあります。我が国は...

人工知能が雪の結晶をリアルタイムで捉え、約700人の足跡を追跡可能に

2月4日の北京冬季オリンピックの開会式で、若い俳優たちが「平和の鳩」を手に持ち、彼らが動くと、足元に...

人工知能はブロックチェーンにどのような影響を与えるのでしょうか?

人工知能 (AI) の開発には、機械による継続的な学習が伴います。コンピュータが「スマート」になるた...