难度简单3520收藏分享切换为英文接收动态反馈
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
思路:
运用charAt()方法将字符串拆分,放入定义的栈内,且栈内只接受左括号,遍历栈时匹配对应的右括号。
注意:
为减少特殊情况的代码运行时长,先判断字符长度是否为偶数,否则直接输出false,每次匹配右括号前先判断栈是否为空,不为空则说明这是一个单独的右括号直接返回false即可。
class Solution {
public boolean isValid(String s) {
if (s.length()%2!=0){
return false;
}
//定义栈接受左括号
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//左括号入栈
if (c=='(' || c=='[' || c=='{'){
stack.push(c);
}else if (c==')'){ //匹配右括号
if (stack.empty()) return false;
if (stack.peek()=='('){
stack.pop();
}else return false;
}else if (c==']'){
if (stack.empty()) return false;
if (stack.peek()=='['){
stack.pop();
}else return false;
}else if (c=='}'){
if (stack.empty()) return false;
if (stack.peek()=='{'){
stack.pop();
}else return false;
}
}
return stack.empty()?true:false;
}
}