代码随想录 Day11 - 栈与队列(下)
 作者:jjn0703
- 2023-07-09  江苏
 本文字数:1770 字
阅读完需:约 6 分钟
作业题
20. 有效的括号
输入字符串判断时,遇到 "}])"时,即可和栈尾做对比,若匹配,则抵消。
package jjn.carl.stack_queue;
import java.util.*;
/** * @author Jiang Jining * @since 2023-07-09 11:39 */public class LeetCode20 {    public boolean isValid(String s) {        if (s == null) {            return false;        }        Deque<Character> cur = new ArrayDeque<>();        Map<Character, Character> map = new HashMap<>();        map.put('}', '{');        map.put(')', '(');        map.put(']', '[');        for (int i = 0; i < s.length(); i++) {            if (cur.isEmpty() || !Objects.equals(cur.peekLast(), map.get(s.charAt(i)))) {                cur.offer(s.charAt(i));            } else {                cur.pollLast();            }        }        return cur.isEmpty();    }        public static void main(String[] args) {        System.out.println("new LeetCode20().isValid(\"()[]{}\") = " + new LeetCode20().isValid("()[]{}"));        System.out.println("new LeetCode20().isValid(\"{[]}\") = " + new LeetCode20().isValid("{[]}"));    }}
复制代码
 1047. 删除字符串中的所有相邻重复项
每个字符均与栈顶元素做对比,若相同则抵消,要么压栈,考虑字符串操作,直接使用 StringBuilder 类进行操作。
package jjn.carl.stack_queue;
import java.util.Objects;
/** * @author Jiang Jining * @since 2023-07-09 14:54 */public class LeetCode1047 {    public String removeDuplicates(String s) {        StringBuilder stringBuilder = new StringBuilder();        for (char c : s.toCharArray()) {            if (stringBuilder.isEmpty() || !Objects.equals(stringBuilder.charAt(stringBuilder.length() - 1), c)) {                stringBuilder.append(c);            } else {                stringBuilder.deleteCharAt(stringBuilder.length() - 1);            }        }        return stringBuilder.toString();    }        public static void main(String[] args) {        String removedDuplicates = new LeetCode1047().removeDuplicates("abbaca");        System.out.println("removedDuplicates = " + removedDuplicates);    }}
复制代码
 150. 逆波兰表达式求值
碰到“+”,“-”,“*”,“/”符号时,则取出栈顶的两个数进行计算,并压入栈中;碰到数字则直接压栈。
package jjn.carl.stack_queue;
import java.util.Set;import java.util.Stack;
/** * @author Jiang Jining * @since 2023-07-09 15:16 */public class LeetCode150 {    public int evalRPN(String[] tokens) {        Set<String> operations = Set.of("+", "-", "*", "/");        Stack<Integer> stack = new Stack<>();        for (String token : tokens) {            if (isOperation(token, operations)) {                int first = stack.pop();                int second = stack.pop();                stack.push(calc(first, second, token));            } else {                stack.push(Integer.parseInt(token));            }        }        return stack.pop();    }        private boolean isOperation(String token, Set<String> operations) {        return operations.contains(token);    }        private int calc(int first, int second, String operation) {        if ("+".equals(operation)) {            return second + first;        }        if ("-".equals(operation)) {            return second - first;        }        if ("*".equals(operation)) {            return second * first;        }        return second / first;    }        public static void main(String[] args) {        int result = new LeetCode150().evalRPN(new String[]{"10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"});        System.out.println("result = " + result);    }}
复制代码
 划线
评论
复制
发布于: 刚刚阅读数: 3
版权声明: 本文为 InfoQ 作者【jjn0703】的原创文章。
原文链接:【http://xie.infoq.cn/article/3e5648083372afd6acea362da】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
jjn0703
关注
Java工程师/终身学习者 2018-03-26 加入
USTC硕士/健身健美爱好者/Java工程师.










    
评论