一、用栈实现队列
class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn=new Stack<>();
stackOut=new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
dumpstackIn();
return stackOut.pop();
}
public int peek() {
dumpstackIn();
return stackOut.peek();
}
public boolean empty() {
return stackIn.isEmpty()&& stackOut.isEmpty();
}
public void dumpstackIn() {
if(!stackOut.isEmpty()) return;
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
二、 用队列实现栈
class MyStack {
Queue<Integer> q1=new ArrayDeque<>();
Queue<Integer> q2=new ArrayDeque<>();
public MyStack() {
}
public void push(int x) {
while(q1.size()>0){
q2.add(q1.poll());
}
q1.add(x);
while(q2.size()>0){
q1.add(q2.poll());
}
}
public int pop() {
return q1.poll();
}
public int top() {
return q1.peek();
}
public boolean empty() {
return q1.isEmpty();
}
}
三、 有效的括号
class Solution {
public boolean isValid(String s) {
Deque<Character> deque=new LinkedList<>();
for(int i=0;i<s.length();i++){
char ch=s.charAt(i);
if(ch=='('){
deque.push(')');
}else if(ch=='{'){
deque.push('}');
}
else if(ch=='['){
deque.push(']');
}
else if(deque.isEmpty()||deque.peek()!=ch){
return false;
}else {
deque.pop();
}
}
return deque.isEmpty();
}
}
四、 删除字符串中的所有相邻重复项
class Solution {
public String removeDuplicates(String s) {
StringBuffer res=new StringBuffer();
int top=-1;
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(top>=0 && res.charAt(top)==c){
res.deleteCharAt(top);
top--;
}
else{
res.append(c);
top++;
}
}
return res.toString();
}
}
五、今日收获
学习+解题+记录=2h。