[编程题] lc:20. 有效的括号-考察栈
题目描述
输入输出例子
思路
思路
使用栈结构,用map保存匹配键值对(LinkedList实现Deque接口模拟栈)
Java代码
class Solution {
public boolean isValid(String s) {
//借助栈
Deque<Character> stack1 = new LinkedList<Character>();
//用于备查的字典
HashMap<Character,Character> map = new HashMap();
map.put(')','(');
map.put(']','[');
map.put('}','{');
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
//这里说明就是( [ {的情况就放入栈
if(!map.containsKey(c)){
stack1.push(c);
}else{
//如果判断是map的键中包含,就是右括号系列,就拿出栈顶比较
if(stack1.isEmpty()){return false;} //边界,如果一开始栈中没东西,肯定就没左半部分匹配
char top = stack1.peek();
char value = map.get(c);
if(top==value){
//把此元素出栈
stack1.pop();
}else{
return false;
}
}
}
//遍历完字符串后,判断栈是否为空,为空则返回true,否则返回false
if(stack1.isEmpty()){
return true;
}else{
return false;
}
}
}
输出:
效率不咋好。