• 316. Remove Duplicate Letters


    Given a string which contains only lowercase letters, 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.

    Example 1:

    Input: "bcabc"
    Output: "abc"
    

    Example 2:

    Input: "cbacdcbc"
    Output: "acdb"

    https://leetcode.com/problems/remove-duplicate-letters/discuss/128235/Java-Stack
    class Solution {
        public String removeDuplicateLetters(String s) {
            if(s.length() <= 1) return s;
            Stack<Character> stack = new Stack();
            int[] freq = help(s);
            
            for(char c : s.toCharArray()){
                freq[c - 'a']--;
                if(stack.contains(c)) continue;
                while(!stack.isEmpty() && stack.peek() > c && freq[stack.peek() - 'a'] > 0) 
                    stack.pop();
                stack.push(c);
            }
            StringBuilder sb = new StringBuilder();
                  while (!stack.isEmpty()) {
                sb.append(stack.pop());
            }
            
            return sb.reverse().toString();
           // return sb.toString();
        }
        public int[] help(String s){
            int[] res = new int[26];
            for(char c : s.toCharArray()){
                res[c - 'a']++;
            }
            return res;
        }
    }

    巧妙,先存所有的frequency,然后遍历string,先ferq--,

    然后检查是否已经存在,

    然后如果stack顶元素大于当前元素,我们肯定不希望这样,然后就检查后面还有没有这个大的,有的话就pop栈顶元素。

    最后用stringbuilder输出。

     
  • 相关阅读:
    微信mac版的bug 直接显示了消息原始数据
    提一下InfoQ
    成长
    SaaS产品成功学
    .io域名在申请SSL证书时被坑
    一件小事
    Git做代码增量发布的重要用法
    今天
    为什么都不写博
    惑不惑
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11909342.html
Copyright © 2020-2023  润新知