用栈来解决问题,需要回答三个问题
1.用什么结构存栈——java中的Deque
2.什么时候入栈——当出现左括号时
3.什么时候出栈——当出现右括号时,把栈顶元素拿出来判断配不配对
class Solution {
public boolean isValid(String s) {
int n=s.length();
if(n%2==1) {
return false;//如果是奇数个,肯定不配对
}
char[] stochar=s.toCharArray();
Map<Character,Character> pairs=new HashMap<Character,Character>();
pairs.put(')','(');
pairs.put('}','{');
pairs.put(']','[');
Deque<Character> stack=new LinkedList<Character>();
for(int i=0;i<n;i++) {
if(pairs.containsKey(Character.valueOf(stochar[i]))) {
//如果是右括号,先把栈顶元素出栈,判断是否配对
if(stack.isEmpty() || stack.peek() != pairs.get(stochar[i])) {
return false;
}
//如果配对了,就出栈,不需要遍历栈内元素
stack.pop();
}
else{
//如果是左括号,进栈,自动放到栈顶
stack.push(stochar[i]);
}
}
return stack.isEmpty();//如果栈内还有元素,肯定是没有配对成功
}
}