import java.io.*;
import java.util.Map;
import java.util.TreeMap;
public class Main {
private static void countFrequency
(Map
<Character,Integer
> freqChars,
char currentChar
) { if (freqChars.containsKey(currentChar)) {
freqChars.put(currentChar, freqChars.get(currentChar) + 1);
} else {
freqChars.put(currentChar, 1);
}
}
private static char findFreqChar
(Map
<Character,Integer
> freqChars
) { int maxFreq = 0;
char theFreqChar = 0;
for (char c : freqChars.keySet()) {
int currentFreq = freqChars.get(c);
if (currentFreq > maxFreq) {
maxFreq = currentFreq;
theFreqChar = c;
}
}
return theFreqChar;
}
private static void appendTheFreqChar
(StringBuilder sortedCharByFreqText, Map
<Character,Integer
> freqChars
) { char theFreqChar = findFreqChar(freqChars);
try {
while (freqChars.containsKey(theFreqChar)) {
writer.append(theFreqChar);
freqChars.put(theFreqChar, freqChars.get(theFreqChar) - 1);
if (freqChars.get(theFreqChar) == 0) {
freqChars.remove(theFreqChar);
}
}
writer.close();
System.
out.
println("The character can't be wrote in the writer"); }
sortedCharByFreqText.append(sw);
}
TreeMap
<Character,Integer
> freqChars
= new TreeMap
<>(); try {
while (reader.ready()) {
countFrequency(freqChars, (char)reader.read());
}
System.
out.
println("The character can't be read."); }
StringBuilder sortedCharByFreqText = new StringBuilder();
while (!freqChars.isEmpty()) {
appendTheFreqChar(sortedCharByFreqText, freqChars);
}
return sortedCharByFreqText.toString();
}
public static void main
(String[] args
) { System.
out.
println(sortedCharByFreq
(reader
)); }
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC5NYXA7CmltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKCnB1YmxpYyBjbGFzcyBNYWluIHsKCXByaXZhdGUgc3RhdGljIHZvaWQgY291bnRGcmVxdWVuY3koTWFwPENoYXJhY3RlcixJbnRlZ2VyPiBmcmVxQ2hhcnMsIGNoYXIgY3VycmVudENoYXIpIHsKICAgICAgICBpZiAoZnJlcUNoYXJzLmNvbnRhaW5zS2V5KGN1cnJlbnRDaGFyKSkgewogICAgICAgICAgICBmcmVxQ2hhcnMucHV0KGN1cnJlbnRDaGFyLCBmcmVxQ2hhcnMuZ2V0KGN1cnJlbnRDaGFyKSArIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZyZXFDaGFycy5wdXQoY3VycmVudENoYXIsIDEpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHJpdmF0ZSBzdGF0aWMgY2hhciBmaW5kRnJlcUNoYXIoTWFwPENoYXJhY3RlcixJbnRlZ2VyPiBmcmVxQ2hhcnMpIHsKICAgICAgICBpbnQgbWF4RnJlcSA9IDA7CiAgICAgICAgY2hhciB0aGVGcmVxQ2hhciA9IDA7CiAgICAgICAgZm9yIChjaGFyIGMgOiBmcmVxQ2hhcnMua2V5U2V0KCkpIHsKICAgICAgICAgICAgaW50IGN1cnJlbnRGcmVxID0gZnJlcUNoYXJzLmdldChjKTsKICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmVxID4gbWF4RnJlcSkgewogICAgICAgICAgICAgICAgbWF4RnJlcSA9IGN1cnJlbnRGcmVxOwogICAgICAgICAgICAgICAgdGhlRnJlcUNoYXIgPSBjOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGVGcmVxQ2hhcjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFwcGVuZFRoZUZyZXFDaGFyKFN0cmluZ0J1aWxkZXIgc29ydGVkQ2hhckJ5RnJlcVRleHQsIE1hcDxDaGFyYWN0ZXIsSW50ZWdlcj4gZnJlcUNoYXJzKSB7CiAgICAgICAgY2hhciB0aGVGcmVxQ2hhciA9IGZpbmRGcmVxQ2hhcihmcmVxQ2hhcnMpOwogICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKICAgICAgICBCdWZmZXJlZFdyaXRlciB3cml0ZXIgPSBuZXcgQnVmZmVyZWRXcml0ZXIoc3cpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHdoaWxlIChmcmVxQ2hhcnMuY29udGFpbnNLZXkodGhlRnJlcUNoYXIpKSB7CiAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKHRoZUZyZXFDaGFyKTsKICAgICAgICAgICAgICAgIGZyZXFDaGFycy5wdXQodGhlRnJlcUNoYXIsIGZyZXFDaGFycy5nZXQodGhlRnJlcUNoYXIpIC0gMSk7CiAgICAgICAgICAgICAgICBpZiAoZnJlcUNoYXJzLmdldCh0aGVGcmVxQ2hhcikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIGZyZXFDaGFycy5yZW1vdmUodGhlRnJlcUNoYXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpOwogICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY2hhcmFjdGVyIGNhbid0IGJlIHdyb3RlIGluIHRoZSB3cml0ZXIiKTsKICAgICAgICB9CiAgICAgICAgc29ydGVkQ2hhckJ5RnJlcVRleHQuYXBwZW5kKHN3KTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc29ydGVkQ2hhckJ5RnJlcShCdWZmZXJlZFJlYWRlciByZWFkZXIpIHsKICAgICAgICBUcmVlTWFwPENoYXJhY3RlcixJbnRlZ2VyPiBmcmVxQ2hhcnMgPSBuZXcgVHJlZU1hcDw+KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5yZWFkeSgpKSB7CiAgICAgICAgICAgICAgICBjb3VudEZyZXF1ZW5jeShmcmVxQ2hhcnMsIChjaGFyKXJlYWRlci5yZWFkKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjaGFyYWN0ZXIgY2FuJ3QgYmUgcmVhZC4iKTsKICAgICAgICB9CiAgICAgICAgU3RyaW5nQnVpbGRlciBzb3J0ZWRDaGFyQnlGcmVxVGV4dCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgd2hpbGUgKCFmcmVxQ2hhcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIGFwcGVuZFRoZUZyZXFDaGFyKHNvcnRlZENoYXJCeUZyZXFUZXh0LCBmcmVxQ2hhcnMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc29ydGVkQ2hhckJ5RnJlcVRleHQudG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc29ydGVkQ2hhckJ5RnJlcShyZWFkZXIpKTsKICAgIH0KfQ==