Java 按字母重复数并打印字母

Java 按字母重复数并打印字母,java,Java,我有这个问题要做: 读一个仅由小字符组成的单词,从重复次数最多的字母开始在屏幕上打印,如果两个字母的重复时间相同,则首先打印最小的值。它必须在最短的时间内完成,所以他们建议我使用bufferedread和bufferedwrite。例: 输入单词: intensified iiieenndfst 输出字: intensified iiieenndfst 我先试了一下: public static void main(String[] args) throws Exception {

我有这个问题要做: 读一个仅由小字符组成的单词,从重复次数最多的字母开始在屏幕上打印,如果两个字母的重复时间相同,则首先打印最小的值。它必须在最短的时间内完成,所以他们建议我使用bufferedread和bufferedwrite。例:

输入单词:

intensified
iiieenndfst
输出字:

intensified
iiieenndfst
我先试了一下:

public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    String word = br.readLine();
    int[] f = new int[26];
    int maxcont = 0;
    StringBuilder rez = new StringBuilder();
    for (int i = 0; i < word.length(); i++) {
        int cont = 0;
        for (int j = 0; j < word.length(); j++){
            if(word.charAt(i) == word.charAt(j) && word.codePointAt(i) > 96) {
                f[word.codePointAt(i)-97]++;
                cont++;
            }
        }
        word = word.replace(word.charAt(i), 'O');
        if (maxcont < cont)
            maxcont = cont;
    }
    while(maxcont != 0) {
        for (int i = 0; i < f.length; i++) {
            if (f[i] == maxcont) {
                for (int j = maxcont; j > 0; j--) {
                    rez.appendCodePoint(i+97);
                }
            }
        }
        maxcont--;
    }
    bw.write(String.valueOf(rez));
    bw.flush();

}
publicstaticvoidmain(字符串[]args)引发异常{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
BufferedWriter bw=新的BufferedWriter(新的OutputStreamWriter(System.out));
String word=br.readLine();
int[]f=新的int[26];
int maxcont=0;
StringBuilder rez=新的StringBuilder();
for(int i=0;i96){
f[word.codepoint(i)-97]++;
cont++;
}
}
word=word.replace(word.charAt(i),“O”);
如果(最大连续<连续)
maxcont=cont;
}
while(maxcont!=0){
对于(int i=0;i0;j--){
雷兹码点(i+97);
}
}
}
maxcont--;
}
write(String.valueOf(rez));
bw.flush();
}
它说这需要太多的时间,所以我尝试了这个:

public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    String word = br.readLine();
    int[] f = new int[123];
    int maxcont = 0, min = 122, max = 96;
    for (int i = 0; i < word.length(); i++) {
        int cont = 0;
        for (int j = 0; j < word.length(); j++){
            if(word.charAt(i) == word.charAt(j) && word.codePointAt(i) > 96) {
                f[word.codePointAt(i)]++;
                cont++;
            }
        }
        if (word.codePointAt(i) < min && word.codePointAt(i) > 96)
            min = word.codePointAt(i);
        if (word.codePointAt(i) > max)
            max = word.codePointAt(i);
        word = word.replace(word.charAt(i), 'O');
        if (maxcont < cont)
            maxcont = cont;
    }
    while(maxcont != 0) {
        for (int i = min; i <= max; i++) {
            if (f[i] == maxcont) {
                for (int j = maxcont; j > 0; j--) {
                    bw.write((char) i);
                    bw.flush();
                }
            }
        }
        maxcont--;
    }
}
publicstaticvoidmain(字符串[]args)引发异常{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
BufferedWriter bw=新的BufferedWriter(新的OutputStreamWriter(System.out));
String word=br.readLine();
int[]f=新的int[123];
int maxcont=0,最小值=122,最大值=96;
for(int i=0;i96){
f[word.codepoint(i)]+;
cont++;
}
}
if(word.codePointAt(i)96)
最小值=字码点(i);
if(字码点(i)>最大值)
max=字码点(i);
word=word.replace(word.charAt(i),“O”);
如果(最大连续<连续)
maxcont=cont;
}
while(maxcont!=0){
对于(int i=min;i 0;j--){
写入((字符)i);
bw.flush();
}
}
}
maxcont--;
}
}

我也有同样的时间问题,所以我可以用什么方法改进代码以使其更快???

您的程序逻辑正常。程序挂起的原因是,当请求数据但输入缓冲区为空时,BufferedReader将挂起。您正在尝试从System.in读取用户输入,但尚未读取,请通过向请求输入的用户发送消息进行初始化:

BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
System.out.println("Enter the word to be evaluated:"); //Add this line
String word = br.readLine(); 

它需要多少时间?你在代码中打印结果到哪里?我真的不知道需要多少时间,我只知道它必须要快一点。它是由像ideone这样的编译器运行的,所以如果我不使用那一行,它就可以工作,但我必须做得更快