LeetCode刷题(232,394)

LeetCode刷题(232,394)_第1张图片

class MyQueue {
        //利用两个栈实现队列,需要一个输入栈,一个输出栈,当用户pop时将输入栈的元素全部添加到输出栈并输出
        Deque outStack;
        Deque inputStack;
    public MyQueue() {
        outStack=new LinkedList<>();
        inputStack=new LinkedList<>();

    }

    public void push(int x) {//只需要把元素添加到输入栈即可
        inputStack.push(x);

    }

    public int pop() {//如果输出栈为空,把输入栈所有元素添加到输出栈
        if (outStack.isEmpty()){
            while (!inputStack.isEmpty()){
                outStack.push(inputStack.pop());
            }
        }
        return outStack.pop();

    }

    public int peek() {
        if (outStack.isEmpty()){
            while (!inputStack.isEmpty()){
                outStack.push(inputStack.pop());
            }
        }
        return outStack.peek();

    }

    public boolean empty() {
        return inputStack.isEmpty()&&outStack.isEmpty();//如果输入栈和出栈同时为空,则队列就是空

    }
}

LeetCode刷题(232,394)_第2张图片

LeetCode刷题(232,394)_第3张图片 

class Solution {
      int pre;//用于获取对应下标的字符
    public String decodeString(String s) {
        pre=0;
        LinkedList stack=new LinkedList<>();
        while (pre list=new ArrayList<>();
                while (!stack.peek().equals("[")){//把字符加入到这个栈
                    list.add(stack.pop());
                }
                Collections.reverse(list);//得到正确的需要循环的字符串
                stack.pop();//弹出'['
                //获取需要循环的次数
                int cur=Integer.parseInt(stack.pop());
                StringBuffer sb=new StringBuffer();//对字符串进行拼接
                String curStr=getString(list);
                while (cur>0){
                    sb.append(getString(list));
                    cur--;
                }//字符串拼接完成,把新的字符串加入到栈
                stack.push(sb.toString());
                pre++;

            }
        }
        Collections.reverse(stack);
        return getString(stack);
    }

    private String getString(List list) {
        StringBuffer sb=new StringBuffer();
        for (String s:list){
            sb.append(s);
        }
        return sb.toString();
    }

    private String getDigit(String s) {
        StringBuffer sb=new StringBuffer();
        while (Character.isDigit(s.charAt(pre))){//如果当前字符是数字,就需要对其进行拼接
            sb.append(s.charAt(pre++));
        }//退出循环说明当前pre对应的字符已经不是数字了
        return sb.toString();
    }


}

 LeetCode刷题(232,394)_第4张图片

 

你可能感兴趣的:(leetcode,算法,职场和发展)