题目链接
题目简介
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例一:输入:s = "()"
输出:true
示例二:输入:s = "([)]"
输出:false
题目解析
- 用栈来进行辅助,依次将字符
( { [
压入栈中 - 当遇到
) } ]
时,去查看我们的栈顶元素是否为对应的字符 - 若匹配,则直接进行弹出,不匹配,则返回
false
- 注意一下
) ) )
这种无压栈情况的发生,需要注意栈可能为空,防止栈异常
题目代码
public boolean isValid(String string) {
if(string == null || string.length() == 0 || string.length() % 2 == 1){
return false;
}
char[] chars = string.toCharArray();
Stack<Character> stack = new Stack<>();
for(int i = 0; i < chars.length; i++){
if(chars[i] == '(' || chars[i] == '[' || chars[i] == '{'){
stack.add(chars[i]);
}
if(chars[i] == ']'){
if(stack.size() == 0 || stack.peek() != '['){
return false;
}
}
if(chars[i] == ')'){
if(stack.size() == 0 || stack.pop() != '('){
return false;
}
}
if(chars[i] == '}'){
if(stack.size() == 0 || stack.pop() != '{'){
return false;
}
}
}
if(stack.size() == 0){
return true;
}else{
return false;
}
}