思路:栈,先进后出
1.左括号入栈,右括号与出栈的值相比,匹配则继续,为空或不匹配则抛错,最后不为空栈则代表漏右括号
Stack stack = new Stack();
int i=0;
while(i<s.length()){
char ch=s.charAt(i);
switch (ch){
case '(': case '[':case '{':
stack.push(ch);
break;
case ')':
if(stack.isEmpty() || !stack.peek().toString().equals("("))
return false;
stack.pop();
break;
case ']':
if(stack.isEmpty() || !stack.peek().toString().equals("["))
return false;
stack.pop();
break;
case '}':
if(stack.isEmpty() || !stack.peek().toString().equals("{"))
return false;
stack.pop();
break;
}
i++;
}
return stack.isEmpty();
2.入栈对称的数据,出栈匹配和判空
if(s == null){
return false;
}
Stack<Character> temp = new Stack<>();
for(char item :s.toCharArray()){
if(item == '['){
temp.push(']');
}else if(item == '{'){
temp.push('}');
}else if(item == '('){
temp.push(')');
}else if(temp.isEmpty() || temp.pop() != item){
//如果 还有数据 并且不是 [ { ( ,那么temp就是空的,不符合要求,或者弹出的元素不等于当前的 也不是
return false;
}
}
return temp.isEmpty();
3.hashmap 存入取值的方式
Deque<Character> stack = new LinkedList<>();
HashMap<Character,Character> map=new HashMap<Character,Character>(){{
put(']','[');
put(')','(');
put('}','{');
}};
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
if(stack!=null && stack.peek()==map.get(s.charAt(i)))
stack.pop();
else
return false;
}else
stack.push(s.charAt(i));
}
return stack.isEmpty();