文字列分割後の最大スコア
1422。文字列分割後の最大スコア
難易度: 簡単
トピック: 文字列、プレフィックス合計
0 と 1 の文字列 s を指定すると、文字列を 2 つの 空でない 部分文字列 (つまり、left 部分文字列と right 部分文字列).
文字列を分割した後のスコアは、左部分文字列のゼロの数と、右の1の数を足したものです。部分文字列。
例 1:
- 入力: s = "011101"
- 出力: 5
- 説明: s を 2 つの空ではない部分文字列に分割する可能なすべての方法は次のとおりです。
- 左 = "0"、右 = "11101"、スコア = 1 4 = 5
- 左 = "01" および右 = "1101"、スコア = 1 3 = 4
- 左 = "011" および右 = "101"、スコア = 1 2 = 3
- 左 = "0111" および右 = "01"、スコア = 1 1 = 2
- 左 = "01110" および右 = "1"、スコア = 2 1 = 3
例 2:
- 入力: s = "00111"
- 出力: 5
- 説明: 左 = "00"、右 = "111" の場合、最大スコア = 2 3 = 5 が得られます
例 3:
- 入力: s = "1111"
- 出力: 3
制約:
- 2
文字列 s は文字「0」と「1」のみで構成されます。
ヒント:
- 1 のプレフィックス合計 ('1') を事前計算します。
- 左から右にゼロ (「0」) の数を数えて反復し、事前に計算されたプレフィックスの合計を使用して 1 (「1」) を数えます。答えを更新します。
解決策:
文字列内の 1 のプレフィックス合計 ('1') を事前計算することで提供されるヒントを利用できます。解決策を詳しく説明します:手順:
- 1 のプレフィックス合計: 文字列内のインデックス i の各要素にインデックス i までの 1 の数 (「1」) が含まれる配列を事前計算します。
-
文字列を反復処理します: 各位置 i について、0 から i までの部分文字列を「左」部分文字列として扱い、i 1 から文字列の末尾までを「右」部分文字列として扱います。
- 反復中に単純にカウントすることで、左側の部分文字列内のゼロを数えます。
- 接頭辞の合計を使用して、右側の部分文字列内の 1 をカウントします (文字列内の 1 の合計数から分割点の接頭辞の合計を減算します)。
- スコアを計算する: 可能な分割ごとに、左側の部分文字列のゼロの数と右側の部分文字列の 1 の数を加算してスコアを計算します。
- 最大スコアを返します。
1422。文字列分割後の最大スコア
<?php /** * @param String $s * @return Integer */ function maxScore($s) { ... ... ... /** * go to ./solution.php */ } // Test cases $s1 = "011101"; $s2 = "00111"; $s3 = "1111"; echo "Input: $s1, Output: " . maxScore($s1) . PHP_EOL; // Output: 5 echo "Input: $s2, Output: " . maxScore($s2) . PHP_EOL; // Output: 5 echo "Input: $s3, Output: " . maxScore($s3) . PHP_EOL; // Output: 3 ?>
-
プレフィックス合計の計算: 配列 $prefixOneCount 内の 1 のプレフィックス合計を計算します。ここで、各インデックスは、その時点までの 1 の累積カウントを保持します。
-
可能な分割の反復: 各インデックス i (0 から n-2) の反復を開始します。ここで、文字列は左側の部分 (0 から i) と右側の部分 ( i 1 から n-1 まで)。
- 分割ごとに、左側の部分文字列 ($zeroCountLeft) のゼロを数えます。
- 事前に計算された $prefixOneCount を使用して、正しい部分文字列に 1 がいくつあるかを計算します。
-
スコア計算: 各スプリットのスコアは、左側の部分の 0 と右側の部分の 1 の合計として計算されます。この反復中に発生した最大スコアを更新します。
-
最終結果: この関数は、すべての分割中に見つかった最大スコアを返します。
-
時間計算量: O(n)
- プレフィックス合計の事前計算と文字列の反復処理はどちらも
- O(n) を要します。 スコアを計算するために文字列を反復処理する場合も O(n) かかります。
- したがって、合計時間計算量は O(n) となり、指定された入力サイズ (n ≤ 500) に対して効率的です。
-
空間の複雑さ: O(n)
- プレフィックス合計配列には、
- O(n) の追加スペースが必要です。
echo maxScore("011101"); // Output: 5 echo maxScore("00111"); // Output: 5 echo maxScore("1111"); // Output: 3
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub でリポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
- GitHub
以上が文字列分割後の最大スコアの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
