20 有效的括号
题目描述
题目链接
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
使用栈解决
class Solution {
public boolean isValid(String s) {
if(s == null || s.length() == 0)
return true;
if(s.length() % 2 == 1)
return false;
Stack<Character> stack = new Stack<Character>();
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(c == '(') //直接存与其对应的括号,然后进行对比是否相等
stack.push(')');
else if(c == '{')
stack.push('}');
else if(c == '[')
stack.push(']');
else if(stack.isEmpty() || stack.pop() != c)
return false;
}
return stack.isEmpty();
}
}
155 最小栈
题目描述
题目链接
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
示例:
输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]
输出:
[null,null,null,null,-3,null,0,-2]
解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
题解
开两个栈,一个数据栈用来存数据,一个最小栈用来存放每一次数据栈push操作的最小值。
数据栈出栈时,如果该元素是当前栈的最小值(最小栈的栈顶元素),最小栈的栈顶元素同样需要pop
class MinStack {
/** initialize your data structure here. */
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack() {
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int x) {
stack.push(x);
if(minStack.empty() || x <= minStack.peek())
minStack.push(x);
}
public void pop() {
if(stack.pop().equals(minStack.peek()))
minStack.pop();
}
public int top() {
if(!stack.empty())
return stack.peek();
throw new RuntimeException("栈中元素为空,此操作非法");
}
public int getMin() {
if(!minStack.empty())
return minStack.peek();
throw new RuntimeException("栈中元素为空,此操作非法");
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/