Java 按字母重复数并打印字母
我有这个问题要做: 读一个仅由小字符组成的单词,从重复次数最多的字母开始在屏幕上打印,如果两个字母的重复时间相同,则首先打印最小的值。它必须在最短的时间内完成,所以他们建议我使用bufferedread和bufferedwrite。例: 输入单词:Java 按字母重复数并打印字母,java,Java,我有这个问题要做: 读一个仅由小字符组成的单词,从重复次数最多的字母开始在屏幕上打印,如果两个字母的重复时间相同,则首先打印最小的值。它必须在最短的时间内完成,所以他们建议我使用bufferedread和bufferedwrite。例: 输入单词: intensified iiieenndfst 输出字: intensified iiieenndfst 我先试了一下: public static void main(String[] args) throws Exception {
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这样的编译器运行的,所以如果我不使用那一行,它就可以工作,但我必须做得更快