代码随想录Day_11|Leetcode.20.1047.150

文章分析了四个Java代码片段,涉及有效括号匹配算法、删除字符串中相邻重复项、以及逆波兰表达式的计算,展示了高效的时间复杂度和内存管理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20.有效括号

执行耗时:54 ms,击败了4.09% 的Java用户
内存消耗:40.6 MB,击败了34.14% 的Java用户

class Solution {
    public boolean isValid(String s) {
        Deque<Character> que = new ArrayDeque<>();
        int len = s.length();
        if (len % 2 == 1) return false;
        for (int i = 0; i < len; i++) {
            char cur = s.charAt(i);
            if (que.isEmpty()) {
                que.add(cur);
            } else if (cur == '(' || cur == '[' || cur == '{') {
                que.add(cur);
            } else if (cur == ')') {
                char last1 = pop(que);
                if (last1 != '(') return false;
            } else if (cur == ']') {
                char last2 = pop(que);
                if (last2 != '[') return false;
            } else if (cur == '}') {
                char last3 = pop(que);
                if (last3 != '{') return false;
            }
        }
        return que.isEmpty();
    }

    public char pop(Deque que1) {
        int size = que1.size();
        size--;
        // 将 que1 导入 que2 ,但留下最后一个值
        while (size-- > 0) {
            que1.addLast(que1.peekFirst());
            que1.pollFirst();
        }

        char res = (char) que1.pollFirst();
        return res;
    }
}

执行耗时:1 ms,击败了98.58% 的Java用户
内存消耗:40.6 MB,击败了29.50% 的Java用户

class Solution {
    public boolean isValid(String s) {
        Deque<Character> deque = new LinkedList<>();
        char ch;
        for (int i = 0; i < s.length(); i++) {
            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();
    }
}

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

class Solution {
    public String removeDuplicates(String s) {
        Stack<Character> stack = new Stack<>();
        int len = s.length();
        for (int i = 0; i < len; i++) {
            char cur = s.charAt(i);
            if (stack.isEmpty()) {
                stack.push(cur);
            } else if (cur == stack.peek()) {
                stack.pop();
            } else {
                stack.push(cur);
            }
        }
        int size = stack.size();
        StringBuilder res =new StringBuilder();

        while(!stack.isEmpty()){
            res.insert(0,stack.pop());
        }
        return res.toString();
    }
}

150.逆波兰表达式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值