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());
}
}
Deque<Integer> que;
public MyStack() {
que = new ArrayDeque<>();
}
public void push(int x) {
que.addLast(x);
}
public int pop() {
int size = que.size();
size--;
while(size-->0){
que.addLast(que.peekFirst());
que.pollFirst();
}
int res = que.pollFirst();
return res;
}
public int top() {
return que.peekLast();
}
public boolean empty() {
return que.isEmpty();
}
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] ss = s.toCharArray();
for(char c:ss){
if(c=='(') stack.push(')');
else if(c=='{') stack.push('}');
else if(c=='[') stack.push(']');
else{
if(stack.isEmpty() || stack.pop()!=c) return false;
}
}
if(!stack.isEmpty()) return false;
return true;
}
public String removeDuplicates(String s) {
char[] ss = s.toCharArray();
String res = "";
Stack<Character> stack = new Stack<>();
for(int i=0;i<ss.length;i++){
if(stack.isEmpty()){
stack.push(ss[i]);
}else{
if(ss[i]==stack.peek()) stack.pop();
else stack.push(ss[i]);
}
}
while(!stack.isEmpty()){
res = stack.pop()+res;
}
return res;
}