package com.interview.books.leetcode; /** * Created_By: stefanie * Date: 14-12-11 * Time: 下午9:42 */ public class LCS19_ReorderStringDDistance { public String reorder(String base, int d){ int[] freq = new int[256]; for(int i = 0; i < base.length(); i++) freq[base.charAt(i)]++; int[] earliest = new int[256]; StringBuffer reordered = new StringBuffer(base.length()); for (int i = 0; i < base.length(); i++){ //find the max freq item can put in i-th location (earliest[j] <= i) int j = findMaxFreq(freq, earliest, i); if (j == -1){ return "Error"; } reordered.append((char)j); freq[j]--; earliest[j] = i + d; } return reordered.toString(); } private int findMaxFreq(int freq[], int[] earliest, int curIdx) { int maxIdx = -1; int maxFreq = 0; for (char ch = 'a'; ch <= 'z'; ch++){ if ((freq[ch] > maxFreq && earliest[ch] <= curIdx)){ maxIdx = ch; maxFreq = freq[ch]; } } return maxIdx; } public static void main(String[] args){ LCS19_ReorderStringDDistance changer = new LCS19_ReorderStringDDistance(); System.out.println(changer.reorder("abbb", 2)); //Error System.out.println(changer.reorder("efabcadf", 4));//afbcadef } }