题解 | #统计字符#

统计字符

http://www.nowcoder.com/practice/539054b4c33b4776bc350155f7abd8f5

题目主要信息

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),只使用了常数空间记录数量。
华为机试 文章被收录于专栏

本专栏主要用于分享华为机试的题解,希望对大家有所帮助。

全部评论
这道题暴力枚举才O(n),可以
点赞 回复 分享
发布于 2023-03-07 10:19 广东
可以
点赞 回复 分享
发布于 2022-11-09 12:17 广东
赞,简单的题也这么细致整理。
点赞 回复 分享
发布于 2022-10-02 21:06 江苏

相关推荐

点赞 评论 收藏
分享
09-06 12:49
门头沟学院 Java
offeroffer...:我也是,前两面还挺紧张认真的,全程大脑飞速运转后面就越来越不想面了,不想说话不想思考
点赞 评论 收藏
分享
评论
7
9
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务