当前位置: 首页 > article >正文

力扣labuladong一刷day27天数组去重

力扣labuladong一刷day27天数组去重

一、316. 去除重复字母

题目链接:https://leetcode.cn/problems/remove-duplicate-letters/
思路:题目有三个要求:去重、保持顺序、字典序尽量小。去重的话我们可以使用一个boolean数组做标记,用过了就不能用了。
保持相对顺序还有字典序,使用栈,当前字符大于栈头,就往里加,小于的话,需要考虑是否弹出栈头,如果栈头是最后一次出现就不要谈了。

class Solution {
   public String removeDuplicateLetters(String s) {
        int[] nums = new int[26];
        boolean[] flags = new boolean[26];
        char[] chars = s.toCharArray();
        for (char c : chars) {
            nums[c-'a'] += 1;
        }
        Deque<Character> stack = new LinkedList<>();
        StringBuilder builder = new StringBuilder();
        for (char c : chars) {
            int i = c-'a';
            nums[i]--;
            if (flags[i]) continue;

            while (!stack.isEmpty() && stack.peek() > c) {
                if (nums[stack.peek()-'a'] == 0) break;
                flags[stack.pop()-'a'] = false;
            }
            stack.push(c);
            flags[i] = true;
        }

        while (!stack.isEmpty()) {
            builder.append(stack.pop());
        }
        return builder.reverse().toString();
    }
}

http://www.kler.cn/news/157602.html

相关文章:

  • 4-Docker命令之docker run
  • 剑指 Offer(第2版)面试题 16:数值的整数次方
  • JAVA-作业7-画一个笑脸
  • 【算法】算法题-20231205
  • 【C++】树型结构关联式容器:map/multimap/set/multisetの使用指南(27)
  • canvas绘制小丑
  • Mysql、Oracle区分大小写?
  • 【新手解答8】深入探索 C 语言:递归与循环的应用
  • spring cloud nacos整合gateway
  • 十五、机器学习进阶知识:K-Means聚类算法
  • 【SQL SERVER】定时任务
  • 【ARM Trace32(劳特巴赫) 使用介绍 12 -- Trace32 常用命令之 d.dump | data.dump 介绍】
  • Linux: 文档 :相关接口文档手册还是需要仔细阅读
  • mfc 设置excel 单元格的列宽
  • EM32DX-C4【C#】
  • 解决:ERROR: No matching distribution found for rarfile
  • 传输层可靠传输的原理
  • 【网络安全技术】密钥管理
  • llama.cpp部署(windows)
  • LinuxBasicsForHackers笔记 --添加和删​​除软件
  • Notepad++ 安装TextFx插件失败
  • 双目光波导AR眼镜_AR智能眼镜主板PCB定制开发
  • 探讨Unity中的动画融合技术(BlendTree)
  • <Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(5)》(21)
  • C#的方法使用
  • C++数据结构:B树
  • C10练习题
  • 分享几个电视颜色测试图形卡
  • JVM类加载全过程
  • 2023-2024-1-高级语言程序设计-第2次月考函数题