题目:有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例:
输入: "()"
输出: true
输入: "()[]{}"
输出: true
输入: "(]"
输出: false
输入: "([)]"
输出: false
输入: "{[]}"
输出: true
思考:
这道题可以使用栈实现。
循环判断字符如果是前括号直接入栈,如果是后括号,先判断栈是否为空,为空则直接返回false。
不为空则将栈顶括号出栈,与当前括号比较是否配对,不配对则返回false,配对则继续循环。
字符串循环结束后,判断存放括号的栈内是否为空,为空即返回true,否则返回false。
实现:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(ch == '(' || ch == '[' || ch == '{'){
stack.push(ch);
}else{
if(stack.isEmpty()){
return false;
}
char topChar = stack.pop();
if(ch == ')' && topChar != '('){
return false;
}else if(ch == ']' && topChar != '['){
return false;
}else if(ch == '}' && topChar != '{'){
return false;
}
}
}
return stack.isEmpty();
}
}