这里用到了栈的思想
栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,因此栈又被称为先进后出(后进先出)的线性表(简称LIFO结构)。
解题思路
特判:过滤空字符串
创建一个辅助栈:
遍历,对每一个字符进行如下操作:
若为左括号,则往栈中存放右括号
若为右括号,如果 栈为空 或者 该右括号与取出的栈顶元素不一样,则返回false;
返回栈是否为空的状态;
class Solution {
public boolean isValid(String s) {
//1.特判
if(s.isEmpty()) return true;
//2.创建辅助栈
Stack<Character> stack = new Stack<>();
//3.遍历
for(char c : s.toCharArray()){
if(c == '('){
stack.push(')');
}else if(c == '['){
stack.push(']');
}else if(c == '{'){
stack.push('}');
}else if(stack.isEmpty() || c != stack.pop()){
return false;
}
}
//4.返回
return stack.isEmpty();
}
}
Java中的栈
1.Stack是Vector的一个子类,它实现标准的后进先出堆栈。Stack只定义了创建空堆栈的默认构造方法
2.Stack类里面主要实现的有以下的几个方法:
(1)boolean empty( )方法是判断堆栈是否为空。
(2)Object peek( )方法是返回栈顶端的元素,但不从堆栈中移除它。
(3)Object pop( )方法是移除堆栈顶部的对象,并作为此函数的值返回该对象。
(4)Object push (Object element)方法是把元素压入栈。
(5)int search(Object element)方法是返回对象在堆栈中的位置,它是以1为基数。
3.Stack类boolean empty()方法
1.boolean empty()方法是判断堆栈是否为空,就需要有一个变量来计算当前栈的长度,若变量的值为0,说明这个栈是空的