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

    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 {
        public String reorganizeString(String S) {
            Map<Character, Integer> map = new HashMap<>();
            for (char c : S.toCharArray()) {
                map.put(c, map.getOrDefault(c, 0) + 1);
            }
            PriorityQueue<Map.Entry<Character, Integer>> pq = new PriorityQueue<>((a, b) -> (b.getValue() - a.getValue()));
            for (Map.Entry<Character, Integer> entry: map.entrySet()) {
                pq.offer(entry);
            }
            
            Map.Entry<Character, Integer> prev = null;
            StringBuilder sb = new StringBuilder();
            while (!pq.isEmpty()) {
                Map.Entry<Character, Integer> cur = pq.poll();
                sb.append(cur.getKey());
                cur.setValue(cur.getValue() - 1);
                
                if (prev != null) {
                    pq.offer(prev);
                }
                if (cur.getValue() > 0) {
                    prev = cur;
                } else {
                    prev = null;
                }
            }
            return sb.length() == S.length() ? sb.toString() : "";
        }
    }
  • 相关阅读:
    在 Cocos2d-x 中添加自己的微博链接
    关于屏幕适配
    [抽象工厂模式]在游戏开发中的应用
    字符串排列组合
    子矩阵最大和
    网易游戏编程题第二题
    动态规划,最大子段和
    C++的四种显示类型转换
    多线程编程
    预处理等等
  • 原文地址:https://www.cnblogs.com/xuanlu/p/12245020.html
Copyright © 2011-2022 走看看