对于练习,我想按频率按顺序排序ASCII字符串,然后按字母顺序排序,因此'banana'应该变成'bnnaaa','grammar'应该变成'gaammrr'。这是我到目前为止所拥有的。
public static orderByFrequencyAndThenAlphabet(String str) {
// 128 ASCII characters possible.
int[] charCount = new int[128]
// Get the counts.
str = str.toCharArray();
for (char c : str) {
charCount[int(c)] += 1;
}
// Sort by frequency...
}
如您所见,我创建了一个数据结构来存储输入字符串中每个字符的计数。但是,我现在如何使用数据结构按频率对字符进行排序?我应该考虑使用优先级队列吗?
答案 0 :(得分:1)
您所要做的就是创建一个字符数组来存储字符串中的所有字符(注意字符数组的大小必须是字符串的长度)。然后对字符数组应用排序(任何你习惯的冒泡排序)然后用排序字符数组构造一个新字符串(注意在排序数组时确保正确的字符大小写)。这是低效的,但它完成了工作。