7012 括號的匹配

2021-09-28 10:07:29 字數 813 閱讀 2536

time limit: 10 second

memory limit: 2 mb

問題描述

假設乙個表示式有英文本母(小寫),整數,運算子(+,—,*,/)和左右小(圓)括號構成, 以"@"作為表示式的結束符.請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹 配,則返回"yes";否則返回"no".假設表示式長度小於255,左圓括號少於20個. 

輸入算術表示式

輸出大寫的英文結果

(22-(18-7))*15@

yes 

(a+22-(18-f)*15@

no 【題解】

這類括號匹配的問題和棧有關。首先。遇到乙個左括號就加入棧中。遇到乙個右括號就退乙個棧。注意,如果退棧的時候,發生棧的下溢。則說明這個右括號是多餘的。則可以直接輸出無解資訊,然後結束程式。否則,如果最後棧為空的。則說明這個字串的左右括號是匹配的。如果棧最後不為空。則這個字串中有多餘的左括號。

【**】

#include #include #include using namespace std;

string ss;

int top = 0;

char stack[2000];

int main()

else //如果棧不為空。則可以和之前的乙個左括號匹配。

top--;

if (top == 0) //如果最後棧為空。則說明匹配成功!

printf("yes");

else

printf("no");

return 0;

}

括號匹配的檢驗

一 題目 假設表示式中可以允許包含三種括號 圓括號 和 方括號 和 和花括號 且這三種括號可按任意的次序巢狀使用。即 或者 等為正確格式,或者均為不正確的格式。編寫判別給定表示式中所含括號是否正確配對出現的演算法。二 思路 檢驗括號是否匹配的方法可以用 期待的急迫程度 這個概念來描述。例如,考慮下列...

20 有效的括號(括號匹配 棧)

給定乙個只包括 的字串 s 判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。示例 1 輸入 s 輸出 true 示例 2 輸入 s 輸出 true 示例 3 輸入 s 輸出 false 示例 4 輸入 s 輸出 false 示例 5 輸入 s 輸出 t...

列印匹配括號

開始抽空做一些演算法題,留下記錄作為菜鳥的成長見證吧。這道題來自於cracking the coding interview,要求列印n對括號的所有可能匹配。我採用遞迴來做,這樣編寫比較方便而且容易弄懂,但用迭代應該會效率快不少而且遞迴一定能轉換成迭代吧,以後有空研究下 如下 include std...