20. 有效的括号
题目详细:LeetCode.20
由题可知,有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
那么,我们可以利用栈后进先出的特点:
- 当遍历到左括号时,将左括号字符依次进栈
- 当遍历到右括号时,将栈顶的左括号字符出栈
- 左括号如果与闭括号属于相同类型,则为有效括号,继续遍历下一个字符
- 左括号如果与闭括号属于不同类型,则为无效括号,栈内剩余的左括号也无法以正确的顺序闭合,返回false
- 如果栈为空,则说明不存在与之匹配的左括号,返回false
- 当遍历完输入的字符串后,注意需要判断栈是否为空,进而来判断字符串内的括号是否已完全匹配
Java解法(栈):
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(char a: s.toCharArray()){
if(a == '(' || a == '{' || a == '['){
stack.push(a);
}else if(stack.isEmpty()){
return false;
}else{
char b = stack.pop();
// 在ASCII码中,左括号和右括号的差值 <= 2
// 所以这里直接用 Math.abs(a-b) 来判断左右括号是否匹配
if(Math.abs(a-b) > 2){
return false;
}
}
}
return stack.isEmpty();
}
}
最低0.47元/天 解锁文章
2946

被折叠的 条评论
为什么被折叠?



