zoukankan      html  css  js  c++  java
  • 767. Reorganize String

    package LeetCode_767
    
    import java.util.*
    import kotlin.collections.HashMap
    
    /**
     * 767. Reorganize String
     * https://leetcode.com/problems/reorganize-string/description/
     *
     * Given a string S, check if the letters can be rearranged so that two characters that are adjacent to each other are not the same.
    If possible, output any possible result.  If not possible, return the empty string.
    
    Example 1:
    Input: S = "aab"
    Output: "aba"
    
    Example 2:
    Input: S = "aaab"
    Output: ""
    
    Note:
    S will consist of lowercase letters and have length in range [1, 500].
     * */
    class Solution {
        fun reorganizeString(S: String): String {
            val map = HashMap<Char, Int>()
            for (c in S) {
                map.put(c, map.getOrDefault(c, 0) + 1)
            }
            val maxHeap = PriorityQueue<Pair<Char, Int>> { a, b -> b.second-a.second }
            for (m in map) {
                //if some latter's appeared frequency lager than half of S
                if (m.value > (S.length + 1) / 2) {
                    return ""
                }
                val pair = Pair(m.key, m.value)
                maxHeap.offer(pair)
            }
            val result = StringBuilder()
            //two characters that are adjacent to each other
            while (maxHeap.size >= 2) {
                var top1 = maxHeap.poll()
                var top2 = maxHeap.poll()
                result.append(top1.first)
                result.append(top2.first)
                //because Pair, like most data classes, is immutable, so we use copy to change it's value
                var count = top1.second
                var count2 = top2.second
                count--
                count2--
                top1 = top1.copy(second = count)
                top2 = top2.copy(second = count2)
                if (top1.second > 0) {
                    maxHeap.offer(top1)
                }
                if (top2.second > 0) {
                    maxHeap.offer(top2)
                }
            }
            //check if some one left
            if (maxHeap.isNotEmpty()) {
                result.append(maxHeap.poll().first)
            }
            return result.toString().reversed()
        }
    }
  • 相关阅读:
    docker与虚拟机性能比较
    CAP原则(CAP定理)、BASE理论
    CAP 定理的含义
    JVM监测分析JConsole
    JConsole详解
    jconsole工具使用
    轻松看懂Java字节码
    JVM 虚拟机字节码指令表
    深入理解java虚拟机(六)字节码指令简介
    大话+图说:Java字节码指令——只为让你懂
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13069671.html
Copyright © 2011-2022 走看看