降低 space 在 Java 的字符串中查找特定字母的复杂性

Decrease the space complexity of finding certain letters in String in Java

问题

我遇到一个问题,即在给定字符串中查找某些字母会占用太多内存,导致 “超出内存限制”。我想知道它的原因。问题和我的代码如下。

问题

代码

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(' ');
        }
    }
}

总结

删除了Scannerclass的调用,直接从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(' ');
        }
    }
}