1106。ブール式の解析
難易度: 難しい
トピック: 文字列、スタック、再帰
ブール式は、true または false に評価される式です。次のいずれかの形状になります:
ブール式を表す文字列式を指定すると、その式の評価を返します。
指定された式が有効であり、指定されたルールに従っていることが保証されます。
例 1:
例 2:
例 3:
制約:
ヒント:
解決策:
ソリューションを、さまざまなタイプの式の解析と評価を処理する小さな関数 (parse_or、parse_and、parse_not)、および式の解析を再帰的に処理するメインの解析関数に分割します。スタックを使用してネストされた式を追跡し、段階的に評価します。
解析と再帰:
ヘルパー関数:
式の処理:
このソリューションを PHP で実装してみましょう: 1106。ブール式の解析
<?php /** * @param String $expression * @return Boolean */ function parseBooleanExpression($expression) { ... ... ... /** * go to ./solution.php */ } /** * the logical AND * * @param $subExpr * @return bool */ function parse_and($subExpr) { ... ... ... /** * go to ./solution.php */ } /** * the logical OR * * @param $subExpr * @return bool */ function parse_or($subExpr) { ... ... ... /** * go to ./solution.php */ } /** * the logical NOT * * @param $subExpr * @return bool */ function parse_not($subExpr) { // subExpr contains only one element for NOT operation ... ... ... /** * go to ./solution.php */ } // Test cases echo parseBooleanExpression("&(|(f))") ? "true" : "false"; // Output: false echo "\n"; echo parseBooleanExpression("|(f,f,f,t)") ? "true" : "false"; // Output: true echo "\n"; echo parseBooleanExpression("!(&(f,t))") ? "true" : "false"; // Output: true ?>
メイン関数 (parseBooleanExpression):
ヘルパー関数:
入力: "&(|(f))"
入力: "|(f,f,f,t)"
入力: "!(&(f,t))"
このソリューションは制約に適しており、入力サイズを効果的に処理できるはずです。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がブール式の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。