美文网首页
代码随想录算法训练营第11天|栈与队列part02

代码随想录算法训练营第11天|栈与队列part02

作者: pangzhaojie | 来源:发表于2023-05-24 16:17 被阅读0次

有效的括号

题目链接

https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7.html

思路

考虑三种情况
1、左括号多
2、右括号多
3、括号不多不少但不匹配

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

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

题目链接

https://programmercarl.com/1047.%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9.html

思路

和上一题差不多,比较简单

    public String removeDuplicates(String s) {
     Stack<Character> stack = new Stack();
    int i = 0;
    while(i < s.length()) {
        if(stack.isEmpty() || stack.peek() != s.charAt(i)) {
            stack.push(s.charAt(i));
        } else {
            stack.pop();
        }
        i++;
    }
    StringBuilder stringBuilder = new StringBuilder();
    while(!stack.isEmpty()) {
        stringBuilder.append(stack.pop());
    }
    return stringBuilder.reverse().toString();
}

逆波兰表达式求值

题目链接

https://programmercarl.com/0150.%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B1%82%E5%80%BC.html

思路

    public int evalRPN(String[] tokens) {
  Stack<Integer> stack = new Stack<>();
    for(String str : tokens) {
        if(str.equals("+")) {
            stack.push(stack.pop() + stack.pop());
        } else if(str.equals("-")) {
            stack.push(-stack.pop() + stack.pop());
        } else if (str.equals("*")) {
            stack.push(stack.pop() * stack.pop());
        } else if(str.equals("/")) {
            int t1 = stack.pop();
            int t2 = stack.pop();
            stack.push(t2/t1);
        } else {
            stack.push(Integer.valueOf(str));
        }

    }
    return stack.pop();
}

相关文章

  • 算法-栈和队列算法总结

    栈和队列算法总结 1 模拟 1.1 使用栈实现队列 1.2 使用队列实现栈 2 栈的应用 2.1 栈操作 2.2 ...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 数据结构的各种代码

    第 02 章 线性表 顺序存储结构 链式存储结构 第 03 章 栈与队列 顺序栈 链栈 两栈共享空间 循环队列 链...

  • 排序算法

    什么是算法 书籍推荐 《数据结构与算法分析》 表、栈和队列 树 散列(hash) 优先队列(堆) 排序 定义 问题...

  • P61-用两个队列实现一个栈

    法1:《剑指》的思路 代码: C++算法之 两个队列实现一个栈 法2:更加简单 思路: 在实现时使得栈顶等于队列头...

  • 队列之-队列实现栈

    一、队列实现栈核心算法概述 之前已经描述过了用栈实现队列的功能,见栈系列之-实现队列,那么同样队列也可以用来实现栈...

  • 集合相关数据结构与算法

    队列 栈数据结构 比较算法 Collections Collection与Collections的区别?Colle...

  • 数据结构与算法目录

    操作系统目录 哈希树遍历链表数组排序堆与栈队列高级算法

  • Swift 队列&栈 相关操作

    栈 LIFO(后进先出) 队列 FIFO(先进先出) 队列与栈相互的实现 栈 - 队列实现 队列 - 栈实现 相关...

  • 数据结构和算法-4.1-栈

    栈&队列 与 数组的区别 用途:数组,链表,树等一般用来作为数据存储的工具,栈和队列更多是用来作为构思程序算法的辅...

网友评论

      本文标题:代码随想录算法训练营第11天|栈与队列part02

      本文链接:https://www.haomeiwen.com/subject/bcxqedtx.html