ホームページ バックエンド開発 PHPチュートリアル 括弧の文字列が有効かどうかを確認する

括弧の文字列が有効かどうかを確認する

Jan 12, 2025 pm 10:04 PM

2116年。括弧の文字列が有効かどうかを確認します

難易度:

トピック: 文字列、スタック、貪欲

括弧文字列は、「(」と「)」だけで構成される空ではない文字列です。次の条件のいずれかが当てはまる場合に有効です:

  • ()です。
  • AB (A と B を連結) として記述することができます。A と B は有効な括弧文字列です。
  • これは (A) として記述できます。A は有効な括弧文字列です。

括弧文字列 s とロックされた文字列が与えられ、どちらも長さは n です。 locked は、「0」と「1」のみで構成されるバイナリ文字列です。 ロックされたインデックス i について、

  • locked[i] が「1」の場合、s[i] を変更できません
  • しかし、locked[i] が '0' の場合は、s[i] を '(' または ')' に変更できます
s を有効な括弧文字列

にできる場合は、true を返します。それ以外の場合は false を返します。

例 1:

括弧の文字列が有効かどうかを確認する

  • 入力: s = "))()))"、ロック = "010100"
  • 出力: true
  • 説明: locked[1] == '1' および locked[3] == '1' であるため、s[1] または s[3] を変更することはできません。
      s を有効にするために、s[2] と s[5] は変更しないまま、s[0] と s[4] を '(' に変更します。

例 2:

  • 入力: s = "()()"、ロック = "0000"
  • 出力: true
  • 説明: s はすでに有効であるため、変更を加える必要はありません。

例 3:

  • 入力: s = ")"、ロック = "0"
  • 出力: false
  • 説明: がロックされているため、s[0] を変更できます。
      s[0] を '(' または ')' に変更しても s は有効になりません。

制約:

    n == s.length == locked.length
  • 1 5 s[i] は '(' または ')' です。
  • locked[i] は '0' または '1' です。

ヒント:

    奇数の長さの文字列は有効ですか?
  1. 左から右に、ロックされた ')' が見つかった場合は、その左側にあるロックされた '(' またはロックされていないインデックスのいずれかでバランスをとる必要があります。どちらも存在しない場合、どのような結論が導き出されますか? 両方が存在する場合、どちらを使用するのがより好ましいですか?
  2. 上記の後、'(' のインデックスがロックされ、さ​​らにロックされていないインデックスが追加された可能性があります。ロックされた '(' のバランスをとるにはどうすればよいですか? ロックされた '(' のバランスをとれない場合はどうすればよいですか?

解決策:

制約とロックされた位置の動作を念頭に置きながら、段階的にアプローチしていきます。

重要なポイント:

  1. 文字列の長さが奇数の場合、有効な括弧文字列は偶数の長さでなければならないため、すぐに false を返すことができます (それぞれの開始 (終了が必要))。
  2. 文字列を反復処理するときに、開き括弧 (() と閉じ括弧 ()) の数を追跡する必要があります。いずれかの時点で、閉じ括弧の数が開き括弧の数を超えると、文字列のバランスを取ることが不可能となり、false が返されます。
  3. ロックされている位置 (locked[i] == '1') とロック解除されている位置 (locked[i] == '0') は慎重に扱う必要があります。ロックされていない位置ではキャラクターを変更できますが、ロックされた位置では変更できません。

アルゴリズム:

  • ステップ 1: 文字列 s の長さが奇数かどうかを確認します。その場合は、すぐに false を返します。
  • ステップ 2: 文字列を左から右にループして、括弧のバランスを追跡します。
    • カウンターを使用して、開き括弧 (と閉じ括弧) のバランスを追跡します。
    • いずれかの時点で、閉じ括弧の数が開き括弧を超えた場合は、ロックされた位置にバランスを取るのに十分な柔軟性があるかどうかを確認してください。
    • 文字列全体を処理した後、括弧のバランスが取れているかどうか、つまり、一致しない開き括弧が残っていないかどうかを確認します。

このソリューションを PHP で実装してみましょう: 2116。括弧文字列が有効かどうかを確認します

<?php /**
 * @param String $s
 * @param String $locked
 * @return Boolean
 */
function canBeValid($s, $locked) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example usage:
$s = "))()))";
$locked = "010100";
var_dump(canBeValid($s, $locked));  // Output: bool(true)

$s = "()()";
$locked = "0000";
var_dump(canBeValid($s, $locked));  // Output: bool(true)

$s = ")";
$locked = "0";
var_dump(canBeValid($s, $locked));  // Output: bool(false)
?>
ログイン後にコピー

説明:

  1. 最初のパス (左から右):

    • 文字列を反復処理し、開き括弧のバランスを追跡します。開き括弧 ( ) に遭遇するたびに、開いたカウンタをインクリメントします。閉じ括弧の場合は、開いたカウンタをデクリメントします。
    • 現在の文字がロック解除されている場合 (locked[i] == '0')、括弧のバランスをとる必要がある場合は、( であると想定できます。
    • いずれかの時点で開いたカウンタが負になった場合、それは開き括弧よりも閉じ括弧の方が多いことを意味し、false を返します。
  2. 2 番目のパス (右から左):

    • 文字列の末尾にある可能性のある開き括弧が一致しないシナリオを処理するために、同様の操作を逆に実行します。
    • ここでは、閉じ括弧 ()) を閉じカウンターで追跡し、不均衡な括弧が存在しないことを確認します。
  3. エッジケース: 文字列の長さが奇数の場合、有効な括弧文字列を形成できないため、すぐに false を返します。

時間計算量:

  • 両方のパス (左から右および右から左) には線形時間 O(n) がかかります。n は文字列の長さです。したがって、全体的な時間計算量は O(n) となり、入力サイズの制約に対して効率的です。

このソリューションは、指定された制約内で問題を正しく処理します。

連絡先リンク

このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!

このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:

  • LinkedIn
  • GitHub

以上が括弧の文字列が有効かどうかを確認するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

See all articles