有效的括号
题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
思路
当我们放入一个左符号时,需要一个对应的右符号,并且需要顺序对应,观察给的样例发现左右符号的对应关系满足先进后出,那么我们只需要一个辅助栈即可,如果遇到左符号就把对应的右符号压入栈,如果遇到对应的右符号就查看栈顶元素是否是对应的右符号,如果是就弹出,如果不是直接返回false,证明顺序不对应。最后如果栈为空返回true,否则返回false。
代码
class Solution {
public boolean isValid(String s) {
if(s.length() % 2 != 0){
return false;
}
Stack<Character> st = new Stack<Character>();
for (char ch : s.toCharArray()){
if(ch == '('){
st.push(')');
}
else if(ch == '['){
st.push(']');
}
else if(ch == '{'){
st.push('}');
}
else if(st.isEmpty() || st.pop() != ch){
return false;
}
}
return st.isEmpty();
}
}