2335. 括号校验器
1000ms
256MB
简单
栈
题目描述
给定一个包含英文小写字母、运算符(`+`, `-`, `*`, `/`)和左右圆括号 `(`、`)` 的表达式。
请编写程序检查表达式中的左右圆括号是否匹配。
**匹配规则**:
1. 所有的左括号必须有对应的右括号闭合。
2. 右括号出现时,其左侧必须有未被匹配的左括号。
3. 表达式扫描结束后,不应留有未匹配的左括号。
若括号匹配,输出 `YES`;否则输出 `NO`。
输入格式
一行字符串,代表待检查的表达式(长度 $< 255$)。
输出格式
一行,输出 `YES` 或 `NO`。
样例 1
输入 (Input)
(y+2)/(12-y)
输出 (Output)
YES
样例 2
输入 (Input)
(a+b))
输出 (Output)
NO
本题是栈(Stack)的典型应用场景:
- 遍历字符串,遇到左括号 `(` 时,将其压入栈中。
- 遇到右括号 `)` 时,检查栈是否为空:
- 若栈为空,说明右括号多余,直接判定为不匹配(`NO`)。
- 若栈不为空,弹出栈顶的一个左括号,表示完成一对匹配。
- 字符串遍历结束后,检查栈是否为空:
- 若栈为空,说明所有左括号都匹配完了,输出 `YES`。
- 若栈不为空,说明左括号有多余,输出 `NO`。
› 输入 stdin
CtrlShiftEnter
‹ 输出 stdout
错误 stderr
操作成功