20. 有效的括号https://leetcode-cn.com/problems/valid-parentheses/
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
public boolean isValid(String s) {
int n=s.length();
if(n%2!=0){
return false;
}
Map<Character,Character> pairs=new HashMap<>(){{
put(')','(');
put(']','[');
put('}','{');
}};
Deque<Character> stack=new LinkedList<>();
for(int i=0;i<n;++i){
char ch=s.charAt(i);
if(pairs.containsKey(ch)){
//stack.peek() 取栈顶的值 不删除
//stack.pop() 取值并删除
if(stack.isEmpty()||stack.peek()!=pairs.get(ch)){
return false;
}
stack.pop();
}else {
stack.push(ch);
}
}
return stack.isEmpty();
}
232. 用栈实现队列https://leetcode-cn.com/problems/implement-queue-using-stacks/
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
法一
class MyQueue {
private Stack<Integer> s1;
private Stack<Integer> s2;
private int front;
public MyQueue() {
s1 = new Stack<>();
s2 = new Stack<>();
}
//入队时 先把s1 放到s2 然后放入s1底部 最后s2放回s1
public void push(int x) {
if (s1.empty())
front = x;
while (!s1.isEmpty())
s2.push(s1.pop());
s2.push(x);
while (!s2.isEmpty())
s1.push(s2.pop());
}
public int pop() {
int v=s1.pop();
if(!s1.empty()){
front=s1.peek();
}
return v;
}
public int peek() {
return front;
}
public boolean empty() {
return s1.isEmpty();
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/
法二
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。