降低 space 在 Java 的字符串中查找特定字母的复杂性
Decrease the space complexity of finding certain letters in String in Java
问题
我遇到一个问题,即在给定字符串中查找某些字母会占用太多内存,导致 “超出内存限制”。我想知道它的原因。问题和我的代码如下。
问题
- describe: 找出元音 a, e, i, o, u 在字符串中出现的次数。
- 输入:输入一行字符串,字符串长度小于80个字符。所以字符都是小写字母。
- 输出:输出一行,依次输出a,e,i,o,u在输入字符串中出现的次数,整数之间用空格隔开。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] count = new int[5]; // refers to 'a' 'e' 'i' 'o' 'u'
Scanner buf = new Scanner(System.in);
String input = buf.nextLine();
buf.close();
for(int i = 0; i < input.length(); i++) {
switch(input.charAt(i)) {
case 'a':
++count[0];
break;
case 'e':
++count[1];
break;
case 'i':
++count[2];
break;
case 'o':
++count[3];
break;
case 'u':
++count[4];
break;
}
}
for(int item: count) {
System.out.print(item);
System.out.print(' ');
}
}
}
总结
删除了Scanner
class的调用,直接从System.in
中一个一个读取字符
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
int[] count = new int[5]; // a e i o u
int temp = System.in.read();
while(temp != '\n') {
switch(temp) {
case 'a': // 97
++count[0];
break;
case 'e':
++count[1];
break;
case 'i':
++count[2];
break;
case 'o':
++count[3];
break;
case 'u':
++count[4];
break;
}
temp = System.in.read();
}
// System.in.close();
for(int item: count) {
System.out.print(item);
System.out.print(' ');
}
}
}
问题
我遇到一个问题,即在给定字符串中查找某些字母会占用太多内存,导致 “超出内存限制”。我想知道它的原因。问题和我的代码如下。
问题
- describe: 找出元音 a, e, i, o, u 在字符串中出现的次数。
- 输入:输入一行字符串,字符串长度小于80个字符。所以字符都是小写字母。
- 输出:输出一行,依次输出a,e,i,o,u在输入字符串中出现的次数,整数之间用空格隔开。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] count = new int[5]; // refers to 'a' 'e' 'i' 'o' 'u'
Scanner buf = new Scanner(System.in);
String input = buf.nextLine();
buf.close();
for(int i = 0; i < input.length(); i++) {
switch(input.charAt(i)) {
case 'a':
++count[0];
break;
case 'e':
++count[1];
break;
case 'i':
++count[2];
break;
case 'o':
++count[3];
break;
case 'u':
++count[4];
break;
}
}
for(int item: count) {
System.out.print(item);
System.out.print(' ');
}
}
}
总结
删除了Scanner
class的调用,直接从System.in
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
int[] count = new int[5]; // a e i o u
int temp = System.in.read();
while(temp != '\n') {
switch(temp) {
case 'a': // 97
++count[0];
break;
case 'e':
++count[1];
break;
case 'i':
++count[2];
break;
case 'o':
++count[3];
break;
case 'u':
++count[4];
break;
}
temp = System.in.read();
}
// System.in.close();
for(int item: count) {
System.out.print(item);
System.out.print(' ');
}
}
}