题目主要信息
1、输入一行字符,统计英文字母、空格、数字和其他字符的个数
2、多行输入
方法一:暴力
具体方法
直接遍历字符串即可,用一个大小为4的数组分别记录英文字母、空格、数字和其他数字的个数即可。
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);
}
}
}
}
复杂度分析
- 时间复杂度:,需要遍历一次字符串
- 空间复杂度:,只需要大小为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);
}
}
}
}
###复杂度分析
- 时间复杂度:,每次统计都需要遍历字符串。
- 空间复杂度:,只使用了常数空间记录数量。