(题目来源:力扣LeetCode)
题目:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
解答:
//使用栈的先入后出的特点完成判断
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] chars = s.toCharArray();
//遍历所有元素
for(char c : chars){
//如果是左括号就把对应的右括号压栈
if(c =='('){
stack.push(')');
}else if(c =='['){
stack.push(']');
}else if(c =='{'){
stack.push('}');
}else if(stack.isEmpty() || stack.pop()!=c){
return false;
//如果遇到右括号,此时栈为空,则无法匹配,返回false
//如果遇到右括号,此时栈不为空,将栈顶元素弹出与括号比较,如果相等继续操作,如果不等返回false
}
}
return stack.isEmpty();
//当栈为空时,说明已经完全匹配,是有效括号;如果栈不为空,并不是完全匹配,不是有效括号。
}
}