zoukankan      html  css  js  c++  java
  • 316. Remove Duplicate Letters

    package LeetCode_316
    
    import java.lang.StringBuilder
    
    /**
     * 316. Remove Duplicate Letters
     * https://leetcode.com/problems/remove-duplicate-letters/description/
     * https://www.youtube.com/watch?v=SrlvMmfG8sA
     *
     * Given a string which contains only lowercase letters,
     * remove duplicate letters so that every letter appear 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"
     * */
    class Solution {
        fun removeDuplicateLetters(s: String): String {
            val count = IntArray(26)
            val used = BooleanArray(26)
            val sb = StringBuilder()
    
            for (c in s) {
                //get every latter's appear count
                count[c.toInt() - 'a'.toInt()]++
            }
    
            for (c in s) {
                count[c.toInt() - 'a'.toInt()]--//because checking if same latter will be appear later,so need reduce it
                if (used[c.toInt() - 'a'.toInt()]) {
                    continue
                }
                //compared order with string had append in sb
                while (sb.length > 0 &&
                    //if last one in sb bigger than current c
                    (sb.get(sb.length - 1).toInt() - 'a'.toInt() > c.toInt()-'a'.toInt()) &&
                    //still have same latter at behind
                    (count[sb.get(sb.length - 1).toInt() - 'a'.toInt()] > 0)
                ) {
                    used[sb.get(sb.length - 1).toInt() - 'a'.toInt()] = false
                    sb.deleteCharAt(sb.length - 1)
                }
                sb.append(c)
                used[c.toInt() - 'a'.toInt()] = true
            }
            return sb.toString()
        }
    }
  • 相关阅读:
    Symmetric Order
    Red and Black
    Sticks(递归经典)
    Pascal Library
    cantor的数表
    OJ 调试技巧:VS2010 中 通过设置编译参数定义宏,无需修改源文件重定向标准输入输出
    strcmp
    最短周期串
    字母重排
    codeblocks 单步调试
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/12551392.html
Copyright © 2011-2022 走看看