题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
力扣:20.有效的括号
示例1:
输入: “()[]{}”
输出: true
示例2:
输入: “([)]”
输出: false
题目分析
该题是 Stack栈 的基础应用,因为 栈先入后出 特点恰好与本题括号排序特点一致,即 若遇到左括号入栈,当遇到右括号时将对应栈顶左括号出栈, 但如果不是和右括号匹配的左括号,或者是遇到右括号时栈为空,即说明括号不能正确匹配,可提前返回 false。当且仅当,遍历完字符串,且最终的栈为空时 ,代表所有括号完全匹配。
AC代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> st = new Stack<>();
char[] bracket = s.toCharArray();
for(char ch : bracket){
//如果是左括号,先将其进战
if(ch == '(' || ch == '[' || ch =='{'){
st.add(ch);
continue;
}
if(st.isEmpty()) return false;
//如果遇到了右括号,进行判断
if(ch == ')'){
char temp = st.peek();
if(temp != '(') return false;
st.pop();
continue;
}
if(ch == ']'){
char temp = st.peek();
if(temp != '[') return false;
st.pop();
continue;
}
if(ch == '}'){
char temp = st.peek();
if(temp != '{') return false;
st.pop();
continue;
}
}
if(!st.isEmpty()) return false;
return true;
}
}