zoukankan      html  css  js  c++  java
  • letcode每日一题-去除重复字母

    题目的letcode连接:https://leetcode-cn.com/problems/remove-duplicate-letters/
    题目描述如下:

    思路:
    运用: 贪心 - 用栈
    用栈来存储最终返回的字符串,并维持字符串的最小字典序。每遇到一个字符,如果这个字符不存在于栈中,就需
    要将该字符压入栈中。但在压入之前,需要先将之后还会出现,并且字典序比当前字符小的栈顶字符移除,然后再将当
    前字符压入。
    代码实现如下:

    
    public String removeDuplicateLetters(String s) {
            HashMap<Character,Integer> last_occurrence =new HashMap<>();
            Stack<Character> no_repeat_list=new Stack<>();
            for(int i=0;i<s.length();i++){
                last_occurrence.put(s.charAt(i),i);
            }
            HashSet<Character> seen = new HashSet<>();
            for(int i=0;i<s.length();i++){
                if(!seen.contains(s.charAt(i))){
                    //在压入之前,需要先将之后还会出现,并且字典序比当前字符小的栈顶字符移除,然后再将当前字符压入。
                    while(!no_repeat_list.isEmpty() && s.charAt(i) < no_repeat_list.peek() && last_occurrence.get(no_repeat_list.peek()) > i){
                        seen.remove(no_repeat_list.pop());
                    }
                    seen.add(s.charAt(i));
                    no_repeat_list.push(s.charAt(i));
                }
            }
            StringBuilder result=new StringBuilder();
            for (Character tmp:no_repeat_list){
                result.append(tmp);
            }
            return result.toString();
        }
    
    
  • 相关阅读:
    java的反射机制浅谈 分类: java
    2.4.3 Cow Tours
    2.4.2 Overfencing
    2.4.1 The Tamworth Two
    Shortest Paths
    2.3.5 Controlling Companies
    2.3.4 Money Systems
    2.3.3 Zero Sum
    2.3.2 Cow Pedigrees
    2.3.1 Longest Prefix
  • 原文地址:https://www.cnblogs.com/MissWX/p/14078420.html
Copyright © 2011-2022 走看看