题目主要信息

1、输入一行字符,统计英文字母、空格、数字和其他字符的个数

2、多行输入

方法一:暴力

具体方法

直接遍历字符串即可,用一个大小为4的数组分别记录英文字母、空格、数字和其他数字的个数即可。

alt

Java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws  IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = bf.readLine()) != null) {
            int []count = new int[4];

            char[] line = str.toCharArray();
            for (char c : line) {
                if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
                    count[0]++;
                } else if (c == ' ') {
                    count[1]++;
                } else if (c >= '0' && c <= '9') {
                    count[2]++;
                } else {
                    count[3]++;
                }
            }
            for (int i : count) {
                System.out.println(i);
            }
        }
    }
}

复杂度分析

  • 时间复杂度:O(n)O(n),需要遍历一次字符串
  • 空间复杂度:O(1)O(1),只需要大小为4的数字。

方法二:借助内置函数判断

具体方法

借助Java中的字符内置的函数

isLetter(c) 判断c是否是字母 isSpaceChar(c)判断c是否是空格 isDigit(c) 判断c是否是数字

Java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import static java.lang.Character.*;

public class Main {
    public static void main(String[] args) throws  IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = bf.readLine()) != null) {
            int []count = new int[4];

            char[] line = str.toCharArray();
            for (char c : line) {
                //英文字母
                if (isLetter(c)) {
                    count[0]++;
                }//空格
                else if (isSpaceChar(c)) {
                    count[1]++;
                }//数字
                else if (isDigit(c)) {
                    count[2]++;
                } else {
                    count[3]++;
                }
            }
            for (int i : count) {
                System.out.println(i);
            }
        }
    }
}

###复杂度分析

  • 时间复杂度:O(n)O(n),每次统计都需要遍历字符串。
  • 空间复杂度:O(1)O(1),只使用了常数空间记录数量。