括號匹配問題思路總結

2021-08-26 14:39:45 字數 944 閱讀 7747

給定一串字元,不超過100個字元,可能包括括號、數字、字母、標點符號、空格,程式設計檢查這一串字元中的( ) ,[ ],是否匹配。

輸入在一行中給出一行字串,不超過100個字元,可能包括括號、數字、字母、標點符號、空格。

如果括號配對,輸出yes,否則輸出no。

sin(10+20)
yes
]
no
首先需要使用stl容器stack(即棧,其用法為先進後出) 

對於這道題的思路就是先把括號挨個存入棧內,然後先存入的元素就為"」,「]」,「)「,就取棧頂元素與元素進行比較,若括號匹配,就把棧頂元素刪除。

我這個寫的還是不夠簡潔,下面引用一段別人的部落格

在遍歷字串時,

遇見左括號則入棧,

遇見右括號則判斷棧是否為空,

不為空則彈出棧頂進行比對,

如果配對則不作處理,

不配對則將標記賦0,跳出

為空則將標記賦0,跳出

輸出時判斷標記是否為真且棧是否為空

重點:這題的坑在於你在遇見右括號時不能直接彈出棧頂,因為棧可能為空,這樣就造成了段錯誤,所以應該加乙個判斷棧頂是否為空的條件

#include#include#include//因為使用了getchar()

using namespace std;

typedef struct

sqlist;

int main()

if(l->top==0) cout<<"yes";//如果棧為空就說明括號剛好匹配。

else

cout<<"no";

return 0;

}

括號匹配 問題總結

大家都知道算術表示式中,括號必須配對,現在任意給出乙個算術表示式,判斷其括號是否配對。如果配對,輸出yes,否則輸出no。含多組測試資料,輸入首先是乙個整數tt表示測試資料組數 0對應每組測試資料,輸出一行結果。input output 2 32 78 23 78 32 78 23 78 yes n...

括號匹配問題的總結

括號匹配問題有若干種,這裡分析其中一種括號裡有數字有字元,然後求的最終結果的問題。給出兩道例題,leetcode224和leetcode394。題目描述 實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例輸入 1 4 5 2 3 6...

括號匹配問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes 基本演算法思...