作者:~小明学编程
文章专栏:每日一练——Java
格言:目之所及皆为回忆,心之所想皆为过往
目录
有效的括号
链接:
题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
代码
class Solution {
private char match(char ch) {
if (ch==')') {
return '(';
} else if (ch==']') {
return '[';
} else {
return '{';
}
}
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i=0;i<s.length();i++) {
char ch = s.charAt(i);
if (ch=='('||ch=='['||ch=='{') {
stack.push(ch);
} else {
//如果栈空直接返回
if (stack.empty()) {
return false;
} else {
//判断是否匹配,匹配则出栈
if (match(ch)==stack.peek()) {
stack.pop();
} else {
return false;
}
}
}
}
//判断是否匹配完毕
if (stack.empty()) {
return true;
} else {
return false;
}
}
}
最小栈
链接:
题目描述:
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。
示例 1:
输入:
["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.
代码:
class MinStack {
private Stack<Integer> minstack = new Stack<>();
private int[] elem;
private int usedSize=0;
public MinStack() {
this.elem = new int[10000];
}
public void push(int val) {
this.elem[this.usedSize++]=val;
if (minstack.empty()) {
minstack.push(val);
} else {
if (val<=minstack.peek()) {
minstack.push(val);
}
}
}
public void pop() {
if (minstack.peek() == this.elem[usedSize-1]) {
minstack.pop();
}
this.usedSize--;
}
public int top() {
return this.elem[usedSize-1];
}
public int getMin() {
return minstack.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/