Я пытаюсь сортировать строку по количеству вхождений каждого из ее символов, с наиболее частым в начале и самым редким в конце. После сортировки мне нужно будет удалить все повторяющиеся символы. Поскольку примеры всегда понятнее, программа должна сделать следующее:Эффективная сортировка строки по количеству вхождений каждого из ее символов
String str = "aebbaaahhhhhhaabbbccdfffeegh";
String output = sortByCharacterOccurrencesAndTrim(str);
В этом случае, метод «sortByCharacterOccurrencesAndTrim» должен вернуться:
String output = "habefcdg"
В случае, когда 2 символа имеют один и тот же возникновение, их порядок в возвращаемой строке не имеет значения. Так что «habefcdg» может также равняться «habfecgd», потому что «f» и «e» встречаются 3 раза, и оба «d» и «g» встречаются один раз.
"habefcdg" would effectively be the same as "habfecgd"
Примечание: Я хотел бы отметить, что производительность имеет значение в этом случае, так что я предпочел бы наиболее эффективный метод возможно. Я говорю это, потому что длина строки может варьироваться от 1 до максимальной длины (что, я думаю, совпадает с Integer.MAX_VALUE, но не уверен), поэтому я хочу свести к минимуму любые потенциальные узкие места.
Есть ограниченный набор символов? – shmosel
Если строка слишком велика, то использование карт будет хорошим вариантом с точки зрения производительности, так как карта может легко сортироваться с помощью hashcode. –
@shmosel Строка кодируется с помощью US_ASCII, поэтому любой доступный символ ascii. – TheMasterGabriel