Appearance
题目
对于括号匹配问题,符号栈初始为空,容量为 3,下列表达式不能实现的是( )。
错因
A
最大嵌套出现在 (a+[b+(c+d):栈中先后压入 (、[、(,共 3 层,正好等于栈容量——刚刚好用满,但没有溢出。误以为"栈被装满"就一定失败的同学忘了:容量 3 意味着最多同时容纳 3 个左符号,等于这个数仍是合法的。
B
子串 [a*(( 一连出现 3 个左括号 [ ( (,看着深,但正好 3 层不超容量。后续 (d-e) 等只是先弹后压,深度不会再加深。
C
[a*(b-(c-d) 处栈中是 [ ( (,3 层;之后 (c-d) 弹完进入 (f+g) 时栈又变回 [ ( (。整个表达式的峰值嵌套深度始终 = 3,刚好不超。
总解析
思路:括号匹配时遇到左符号入栈、遇到右符号出栈匹配;扫描全过程中栈中元素数的峰值就是表达式的最大嵌套深度。栈容量 3 意味着峰值不能 > 3。
逐项追踪栈深变化(只看左右括号 / 方括号):
| 选项 | 关键扫描位置 | 峰值深度 |
|---|---|---|
| A | ( [ ( … )、]、) 全部弹完 | 3 |
| B | [ ( ( … )( )( )、] 反复但未再叠加 | 3 |
| C | [ ( ( … )( )、] 来回但峰值 = 3 | 3 |
| D | [ ( [ ( 出现 4 层! | 4 |
D 的扫描细节:[a-(b+[c*(d+e)
[→ 栈[,深度 1(→ 栈[ (,深度 2[→ 栈[ ( [,深度 3(已用满)(→ 栈[ ( [ (,深度 4 → 入栈失败
栈容量已满还要再压入新左括号,匹配中断,无法完成。
最终答案是 D。