• 0316. Remove Duplicate Letters (M)


    Remove Duplicate Letters (M)

    题目

    Given a string s, remove duplicate letters so that every letter appears once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.

    Note: This question is the same as 1081: https://leetcode.com/problems/smallest-subsequence-of-distinct-characters/

    Example 1:

    Input: s = "bcabc"
    Output: "abc"
    

    Example 2:

    Input: s = "cbacdcbc"
    Output: "acdb"
    

    Constraints:

    • 1 <= s.length <= 10^4
    • s consists of lowercase English letters.

    题意

    删去字符串里重复的字母,使剩下的字母都只出现一次且得到的字符串在所有可能结果中字典序最小。

    思路

    先遍历一遍统计所有字母出现的次数。

    再次遍历字符串,如果当前字符c已经安排在结果字符串s中,则跳过;若还未安排,将c与s中最后一个字符c'进行比较,如果c<c'且c'在之后还会出现,则删除c',重复该操作直到末尾所有满足的c'都被删除,最后将c加到s的末尾。


    代码实现

    Java

    class Solution {
        public String removeDuplicateLetters(String s) {
            Deque<Character> deque = new ArrayDeque<>();
            int[] count = new int[26];
            boolean[] used = new boolean[26];
    
            for (char c : s.toCharArray()) {
                count[c - 'a']++;
            }
    
            for (char c : s.toCharArray()) {
                if (!used[c - 'a']) {
                    while (!deque.isEmpty() && c < deque.peekLast() && count[deque.peekLast() - 'a'] > 0) {
                        used[deque.peekLast() - 'a'] = false;
                        deque.pollLast();
                    }
                    deque.offer(c);
                    used[c - 'a'] = true;
                }
                count[c - 'a']--;
            }
    
            StringBuilder sb = new StringBuilder();
            while (!deque.isEmpty()) {
                sb.append(deque.poll());
            }
            return sb.toString();
        }
    }
    
  • 相关阅读:
    Spring国际化模块
    广告牌 循环 轮播 图片
    ImageLoader 网络加载图片
    ProgressBar 进度条 旋转
    UI处理 线程
    权限 动态 访问
    系统 状态栏 导航栏
    对话框 dialog 整理
    修改 字体
    获取 Activity中所有的View ViewGroup
  • 原文地址:https://www.cnblogs.com/mapoos/p/13798306.html
Copyright © 2020-2023  润新知