题目:
给定一个只由左右原括号、花括号和方括号组成的字符串,求这个字符串是否合法。合法的
定义是每一个类型的左括号都有一个右括号一一对应,且括号内的字符串也满足此要求。
思路:
括号匹配是典型的使用栈来解决的问题。我们从左往右遍历,每当遇到左括号便放入栈内,
遇到右括号则判断其和栈顶的括号是否是统一类型,是则从栈内取出左括号,否则说明字符串不
合法。
结合代码理清思路:
class Solution {
public boolean isValid(String s) {
int n = s.length();
if (n%2 ==1){//奇数就直接返回false
return false;
}
Map<Character,Character>pairs = new HashMap<Character,Character>(){
{//存入括号类型
put(')','(');
put('}','{');
put(']','[');
}
};
Deque<Character>stack = new LinkedList<Character>();
for(int i = 0; i < n; i++){
char ch = s.charAt(i);
if (pairs.containsKey(ch)){//匹配括号
if (stack.isEmpty() || stack.peek() != pairs.get(ch)){
//为空或者括号不配返回false
return false;
}
stack.pop();//出栈
}else{
stack.push(ch);//压栈
}
}
return stack.isEmpty();//必须为空,证明完全匹配为true
}
}