資料結構與演算法之括號匹配問題

2021-09-13 13:25:00 字數 668 閱讀 7750

在各大公司的筆試題中,我們經常會遇到關於括號匹配的問題。其實匹配問題中主要運用到的資料結構就是棧,例如對乙個字串進的左右括號進行匹配,字串(a*(b+c)+d)在位置0和位置3有左括號,在位置7和10有右括號,位置0的左括號與位置10的右括號相匹配,位置3左括號和位置7的右括號進行匹配。在字串(d+f))( 中,位置5的左括號和位置6的右括號都沒有與之相配的括號。在這種問題一般要求輸入乙個字串,然後輸出匹配的括號以及不匹配的括號。

解題方法:通過觀察字串,我們可以發現,每乙個右括號都會與最近的左括號進行匹配,當我們從左至右進行字元掃瞄的時候,遇到左括號的時候我們將左括號進行入棧操作。然而,當我們遇到乙個右括號的時候,判斷棧是否為空,如果棧為空說明沒有相對應的左括號與之相匹配,這時我們輸出沒有匹配的右括號,然後繼續上述操作。如果棧不為空的話,我們取出棧頂的左括號(並將該左括號從棧中刪除)與掃瞄到的右括號進行匹配,輸出匹配的括號,繼續下一輪操作直至掃瞄完成。

以下是具體的c++程式

void printmatchedpairs(string expr)

else

catch(s.empty()) //若棧為空,說明該右括號沒有被匹配

}} //判斷是否有剩下的左括號

while(!s.empty())

}}

資料結構 括號匹配問題

給定乙個字串,其中的字元只包含三種括號 花括號 中括號 圓括號 即它僅由 這六個字元組成。設計演算法,判斷該字串是否有效,即字串中括號是否匹配。括號匹配要求括號必須以正確的順序配對,如 或 等為正確的格式,而 或 或 均為不正確的格式。這個問題可以用棧stack來解決,具體的 如下 pragma o...

資料結構題 括號匹配問題

括號匹配問題是棧應用的乙個經典場景,原理比較簡單 假設表示式中允許包含兩種括號 圓括號和方括號,其嵌入的順序隨意,即 或 等為正確的格式,或 或 均為不正確的格式。檢驗括號是否匹配的方法可用 期待的急迫程度 這個概念來描述。由此,在演算法中設定乙個棧,每讀入乙個括號,若是右括號,則或者使置於棧頂的最...

C 資料結構 括號匹配問題

translation include include include using namespace std 設定乙個bool型函式對表示式中括號是否正確進行檢查 bool fun string str return false 如果c和當前右括號匹配,返回false if s.empty ret...