题目描述
思路
- 栈是一种后进先出的数据结构,处理括号问题的时候尤其有用
- 思路:遇到左括号就入栈,遇到右括号就去栈中寻找最近的左括号,查看是否与之匹配
- 在代码编写的时候,我们常常可以编写另外一个函数用于相应的调用,这样编写代码时候会显得更加简洁
创建一个栈
Stack<Character> left = new Stack<>();
将一个字符串转换为字符数组
s.toCharArray()
代码实现
class Solution {
public boolean isValid(String s) {
// 栈是一种先进后出的数据结构,处理括号问题的时候尤其有用
// 思路:遇到左括号就入栈,遇到右括号就去栈中寻找最近的左括号,查看是否与之匹配
// java中创建一个栈其实有点类似于队列的相关操作
Stack<Character> left = new Stack<>();
// 遍历
for(char c : s.toCharArray()){
if (c == '(' || c == '{' || c == '['){
left.push(c);
}else{ // 右括号
// java栈中返回顶部元素但是不删除可以使用peek()
if(!left.isEmpty() && leftOf(c) == left.peek()){
left.pop();
}else{
// 和最近的右括号不匹配
return false;
}
}
}
// 是否所有的左括号都被匹配了
return left.isEmpty();
}
char leftOf(char c){
if(c == '}') return '{';
if(c == ')') return '(';
else return '[';
}
}