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...