c***g 发帖数: 472 | 1 给一个字符串,包含三种括号,{} [] (), 如何判断是合法的括号搭配?
这个,应该用一个stack就够了,如果碰到左括号,push,碰到右括号,pop,如果不匹
配,就返回false;如果最后stack为空,返回true,如果stack不为空,返回false
请问,是这样的么?
但是,我记得小时候,括号是有优先级的
比如,{} 不能在[] ()里面, []不能在()里面
({}[]) 不合法 {[()]()} 合法
如果有优先级,如何判断是合法的搭配呢? |
s******c 发帖数: 99 | 2 不需要考虑这些吧,只要看每一种的左括号是不是能匹配上右括号就行了 |
d******u 发帖数: 397 | 3 用你的方法之前问问你的interviewer有没有括号优先级好了。呵呵 |
c***g 发帖数: 472 | 4 我的意思是,如果有优先级,怎么做?
【在 d******u 的大作中提到】 : 用你的方法之前问问你的interviewer有没有括号优先级好了。呵呵
|
c****p 发帖数: 6474 | 5 笨办法:
搭配一个优先级栈,栈元素的值和括号等级相同。
符号串: {[()()]}
优先级串:01222210
入栈左括号的时候如果发现优先级栈的栈顶值大于等于当前括号等级的时候则视为不合
法。【 在 csdfg (谁是东方郭) 的大作中提到: 】 |
g*********e 发帖数: 14401 | |
f*********i 发帖数: 197 | 7 不需要两个stack,一个就可以了
就是在push的时候判断,如果当前push的是{,那么如果stack不为空就是false
如果当前的push是[,那么stack.peek只能是{或者为空,否则返回false
如果当前push(,无所谓。
接下来就是和没有优先级别一样了。 |