给定一个只包括 ( ) [ ] { } 的字符串
s
,判断括号是否按正确的顺序被括起来。
示例:
输入: s = ( { [ ] } [ ] )
输出: true
输入: s = [ ) ( }
输出: false
/**
*利用哈希表建立左右括号的映射
*利用栈“后进先出”的特点进行匹配
*碰到左括号则入栈
*碰到右括号则判断与栈顶的左括号是否为一对,若是则左括号出栈
*若字符串还未遍历完栈就为空,或字符串遍历完但栈不为空,则表示有多余的半侧括号
*若字符串遍历结束后栈为空,则表示全部匹配
*/
class Solution {
public boolean isValid(String s) {
HashMap<Character, Character> brackets = new HashMap();
brackets.put('(', ')');
brackets.put('[', ']');
brackets.put('{', '}');
Stack<Character> stack = new Stack();
for(int i = 0; i < s.length(); i++){
//若为左括号,则入栈
if(brackets.containsKey(s.charAt(i))){
stack.push(s.charAt(i));
}
//若为右括号,则判断与栈顶左括号是否为一对
else{
//若此时栈中没有元素,返回false
if(stack.empty()){
return false;
}
//若为一对,则栈顶元素出栈
if(s.charAt(i) == brackets.get(stack.peek())){
stack.pop();
}
else{
return false;
}
}
//若字符串遍历完了,栈仍有剩余,返回false
if(i == s.length() - 1 && !stack.empty()){
return false;
}
}
return true;
}
}