1106。解析布林表達式
難度:難
主題:字串、堆疊、遞歸
布林表達式 是計算結果為 true 或 false 的表達式。它可以是以下形狀之一:
- 't' 的計算結果為 true。
- 'f' 的計算結果為 false。
- '!(subExpr)' 計算結果為內部表達式 subExpr 的 邏輯 NOT。
- '&(subExpr1, subExpr2, ..., subExprn)' 計算結果為內部的 邏輯AND表達式subExpr1, subExpr2, ..., subExprn 其中n >= 1.
- '|(subExpr1, subExpr2, ..., subExprn)' 計算結果為內部的 邏輯OR表達式subExpr1, subExpr2, ..., subExprn 其中n >= 1.
給定一個表示布林表達式的字串表達式,傳回該表達式的評估。
保證給定的表達式有效並遵循給定的規則。
範例1:
- 輸入: 表達式 = "&(|(f))"
- 輸出: false
-
說明:
- 首先,評估 |(f) --> f.現在的表達式是「&(f)」。
- 然後,評估 &(f) --> f.現在的表達式是「f」。
- 最後回傳 false。
範例2:
- 輸入: 表達式 = "|(f,f,f,t)"
- 輸出: true
- 解釋: (false OR false OR false OR true) 的評估為 true。
範例 3:
- 輸入: 表達式 = "!(&(f,t))"
- 輸出: true
-
說明:
- 首先,評估 &(f,t) --> (假與真)-->假--> f.現在的表達式是「!(f)」。
- 然後,評估 !(f) -->不假-->真的。我們回傳 true。
約束:
- 1 4
- 表達式[i] 是下列字元之一:'(', ')', '&', '|', '!', 't', 'f', 和 ','。
提示:
- 寫一個函數“parse”,它呼叫輔助函數“parse_or”、“parse_and”、“parse_not”。
解:
我們將把解決方案分解為更小的函數,用於處理解析和評估不同類型的表達式:parse_or、parse_and、parse_not,以及一個主要的解析函數,用於遞歸地處理表達式的解析。我們將使用堆疊來追蹤嵌套表達式並逐步評估它們。
方法:
-
解析與遞歸:
- 遇到巢狀括號時使用堆疊來追蹤表達式。
- 依序處理字元並管理巢狀計算的堆疊。
- 遇到右括號 ) 時,提取最後一組表達式並應用邏輯運算(&、| 或 !)。
-
輔助函數:
- parse_or:如果至少一個子表達式為 true,則透過傳回 true 來評估 |(expr1, expr2, ..., exprN)。
- parse_and:只有當所有子表達式都為 true 時才傳回 true 來評估 &(expr1, expr2, ..., exprN)。
- parse_not:透過傳回子表達式的相反值來計算 !(expr)。
-
表達式處理:
- 像 t 和 f 這樣的單一字元直接翻譯為 true 和 false。
- 當遇到運算(&、|、!)時,內部表達式將根據各自的規則進行計算。
讓我們用 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 ?>
解釋:
-
主要函數(解析布林表達式):
- 迭代表達式並將字元推入堆疊。
- 遇到 ) 時,它會收集括號內的所有元素,並根據運算(&、|、!)對其進行求值。
- 將結果轉換為「t」(真)或「f」(假)並將它們推回堆疊。
-
輔助函數:
- parse_and:如果所有子表達式都是「t」(true),則傳回 true。
- parse_or:如果任何子表達式為“t”,則傳回 true。
- parse_not:反轉單一子表達式的布林值。
演練範例:
-
輸入:「&(|(f))」
- 堆疊處理:
- &, (, |, (, f, ), ) → 內部表達式 |(f) 計算為 f。
- 產生 &(f),其計算結果為 f。
- 輸出:假。
- 堆疊處理:
-
輸入:「|(f,f,f,t)」
- 評估 |手術:
- 找到一個“t”,因此計算結果為 true。
- 輸出:true。
- 評估 |手術:
-
輸入:「!(&(f,t))」
- 堆疊處理:
- !, (, &, (, f, ,, t, ), ) → &(f,t) 計算結果為 f。
- 然後 !(f) 被評估為 true。
- 輸出:true。
- 堆疊處理:
複雜:
- 時間複雜度:O(N),其中N是表達式的長度。每個字元的處理次數有限。
- 空間複雜度:O(N),因為堆疊用於追蹤巢狀表達式。
此解決方案非常適合約束條件,並且應該有效處理輸入大小。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
- 領英
- GitHub
以上是解析布林表達式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

DependencyInjection(DI)inPHPenhancescodeflexibilityandtestabilitybydecouplingdependencycreationfromusage.ToimplementDIeffectively:1)UseDIcontainersjudiciouslytoavoidover-engineering.2)Avoidconstructoroverloadbylimitingdependenciestothreeorfour.3)Adhe

到Improveyourphpwebsite的實力,UsEthestertate:1)emplastOpCodeCachingWithOpcachetCachetOspeedUpScriptInterpretation.2)優化的atabasequesquesquesquelies berselectingOnlynlynnellynnessaryfields.3)usecachingsystemssslikeremememememcachedisemcachedtoredtoredtoredsatabaseloadch.4)

是的,ItispossibletosendMassemailswithp.1)uselibrarieslikeLikePhpMailerorSwiftMailerForeffitedEmailsending.2)enasledeLaysBetenemailstoavoidSpamflagssspamflags.3))

DependencyInjection(DI)inPHPisadesignpatternthatachievesInversionofControl(IoC)byallowingdependenciestobeinjectedintoclasses,enhancingmodularity,testability,andflexibility.DIdecouplesclassesfromspecificimplementations,makingcodemoremanageableandadapt

使用PHP發送電子郵件的最佳方法包括:1.使用PHP的mail()函數進行基本發送;2.使用PHPMailer庫發送更複雜的HTML郵件;3.使用SendGrid等事務性郵件服務提高可靠性和分析能力。通過這些方法,可以確保郵件不僅到達收件箱,還能吸引收件人。

計算PHP多維數組的元素總數可以使用遞歸或迭代方法。 1.遞歸方法通過遍歷數組並遞歸處理嵌套數組來計數。 2.迭代方法使用棧來模擬遞歸,避免深度問題。 3.array_walk_recursive函數也能實現,但需手動計數。

在PHP中,do-while循環的特點是保證循環體至少執行一次,然後再根據條件決定是否繼續循環。 1)它在條件檢查之前執行循環體,適合需要確保操作至少執行一次的場景,如用戶輸入驗證和菜單系統。 2)然而,do-while循環的語法可能導致新手困惑,且可能增加不必要的性能開銷。

在PHP中高效地哈希字符串可以使用以下方法:1.使用md5函數進行快速哈希,但不適合密碼存儲。 2.使用sha256函數提高安全性。 3.使用password_hash函數處理密碼,提供最高安全性和便捷性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中