首页 > 代码库 > [LeetCode] String Reorder Distance Apart

[LeetCode] String Reorder Distance Apart

Question:

Given a string of lowercase characters, reorder them such that the same characters are at least distance d from each other.


Input: { a, b, b }, distance = 2

Output: { b, a, b }


http://leetcode.com/2010/05/here-is-another-google-phone-interview.html

public void reorder(int[] A, int d)
{
    // Stats
    Map<Integer, Integer> map = new HashMap<>();
    for (int i : A) 
    {
        Integer occurance = map.get(i);
        if (occurance == null)
            occurance = 0;
        occurance++;
        map.put(i, occurance);
    }
    
    // Sort
    List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
    Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>()
    {
        public int compare(Entry<Integer, Integer> a, Entry<Integer, Integer> b) 
        {
            return -1 * Integer.compare(a.getValue(), b.getValue());
        }
    });
    
    // Re-assign
    int curIndex = 0;
    Map.Entry<Integer, Integer> cur = list.get(curIndex);
    int curOccurance = 0;
    for (int offset = 0; offset < d; offset++)
    {
        for (int i = offset; i < A.length; i += d)
        {
            A[i] = cur.getKey();
            curOccurance++;
            
            if (curOccurance == cur.getValue())
            {
                curIndex++;
                if (curIndex == list.size())
                    return;
                cur = list.get(curIndex);
                curOccurance = 0;
            }
        }
    }
}


[LeetCode] String Reorder Distance Apart