第20题:有效的括号
题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
-
左括号必须用相同类型的右括号闭合。
-
左括号必须以正确的顺序闭合。
解题思路:
用HashMap储存左右括号配对关系,对字符串进行遍历,用栈储存合法元素,非法直接返回false
题解:
class Solution {
public boolean isValid(String s) {
int len = s.length();
if (len % 2 == 1 || len < 1) return false;
Map<Character, Character> kuohao = new HashMap<Character, Character>();
kuohao.put(')', '(');
kuohao.put(']', '[');
kuohao.put('}', '{');
Deque<Character> stack = new LinkedList<Character>();
for (int i = 0; i < len; i++) {
char ch = s.charAt(i);
if (kuohao.containsKey(ch)){
if (stack.isEmpty()|| stack.peek() != kuohao.get(ch)) return false;
// 当前为右括号时,栈空或者栈顶元素不匹配,都说明括号顺序非法
stack.pop();
}else{
stack.push(ch);
// 左括号无脑入栈
}
}
return stack.isEmpty();
}
}