刷题日记10 | 20. 有效的括号、 150. 逆波兰表达式求值、1047. 删除字符串中的所有相邻重复项

54 阅读1分钟

刷题日记10

今天大年初四!休息了3天,重新开始刷题!今日主题依然是栈和队列。

20. 有效的括号

这道题思路很简单,把每个"(", "[" ,"{" 都压入栈中,如果栈为空或者栈顶的元素和字符不同直接返回false,相同则弹出栈顶元素。最后判断栈是否为空。

class Solution {
    public boolean isValid(String s) {
        Stack<Character> st = new Stack<>();
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == '('){
                st.push(')');
            }else if(s.charAt(i) == '{'){
                st.push('}');
            }else if(s.charAt(i) == '['){
                st.push(']');
            }else if(st.isEmpty() || s.charAt(i) != st.peek()){
                return false;
            }else{
                st.pop();
            }
        }
        return st.isEmpty();
    }
}

1047. 删除字符串中的所有相邻重复项

思路很简单,用队列或者栈保存字符,遇到相同的就弹出。

    public String removeDuplicates(String s) {
        Deque<Character> q = new ArrayDeque<>();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if(!q.isEmpty() && q.peekLast() == c){
                q.pollLast();
            }else{
                q.offerLast(c);
            }
        }
        while(!q.isEmpty()){
            sb.append(q.pollFirst());
        }
        return sb.toString();
    }
}a

150. 逆波兰表达式求值

用栈来进行四则运算

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> s = new Stack<>();
        for(int i = 0; i < tokens.length; i++){
            int v1, v2;
            if("+".equals(tokens[i])){
                v2 = s.pop();
                v1 = s.pop();
                s.push(v1 + v2);
            }else if("-".equals(tokens[i])){
                v2 = s.pop();
                v1 = s.pop();
                s.push(v1 - v2);
            }else if("*".equals(tokens[i])){
                v2 = s.pop();
                v1 = s.pop();
                s.push(v1 * v2);
            }else if("/".equals(tokens[i])){
                v2 = s.pop();
                v1 = s.pop();
                s.push(v1 / v2);
            }else{
                s.push(Integer.valueOf(tokens[i]));
            }
        }
        return s.pop();
    }
}