zoukankan      html  css  js  c++  java
  • 1209. Remove All Adjacent Duplicates in String II

    package LeetCode_1209
    
    import java.util.*
    
    /**
     * 1209. Remove All Adjacent Duplicates in String II
     * https://leetcode.com/problems/remove-all-adjacent-duplicates-in-string-ii/description/
     *
     * Given a string s, a k duplicate removal consists of choosing k adjacent and equal letters from s and removing them causing the left and the right side of the deleted substring to concatenate together.
    We repeatedly make k duplicate removals on s until we no longer can.
    Return the final string after all such duplicate removals have been made.
    It is guaranteed that the answer is unique.
    
    Example 1:
    Input: s = "abcd", k = 2
    Output: "abcd"
    Explanation: There's nothing to delete.
    
    Example 2:
    Input: s = "deeedbbcccbdaa", k = 3
    Output: "aa"
    Explanation:
    First delete "eee" and "ccc", get "ddbbbdaa"
    Then delete "bbb", get "dddaa"
    Finally delete "ddd", get "aa"
    
    Example 3:
    Input: s = "pbbcggttciiippooaais", k = 2
    Output: "ps"
    
    Constraints:
    1 <= s.length <= 10^5
    2 <= k <= 10^4
    s only contains lower case English letters.
     * */
    
    data class Node(var char: Char, var count: Int = 1)
    
    class Solution {
        /*
        * solution:Queue, Time complexity:O(n), Space complexity:O(n)
        * */
        fun removeDuplicates(s: String, k: Int): String {
            val result = StringBuilder()
            var removed = false
            val queue = LinkedList<Node>()
            for (c in s) {
                //keep tracking the element at the tail
                if (queue.isEmpty() || queue.last.char != c) {
                    queue.addLast(Node(c))
                } else {
                    queue.last.count++
                    if (queue.last.count == k) {
                        queue.removeLast()
                        removed = true
                    }
                }
            }
            if (!removed) {
                return s
            }
            while (queue.isNotEmpty()) {
                val cur = queue.removeFirst()
                while (cur.count-- > 0) {
                    result.append(cur.char)
                }
            }
            return result.toString()
        }
    }
  • 相关阅读:
    高级开发必须理解的Java中SPI机制
    希尔排序--python
    SpringContextAware使用详解
    visio professional 2013 密钥
    二分查找--python
    [Oracle]单行字符函数
    [Oracle]sqlplus调整列宽
    [Oracle]MacOS sqlplus上下选择命令
    [Oracle]开启SCOTT账户
    [Oracle]Macos 安装Oracle Client 11g 11.2.0.4
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13326825.html
Copyright © 2011-2022 走看看