HJ10 字符个数统计

112 阅读2分钟

Problem: HJ10 字符个数统计

题目描述

描述

编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

数据范围:  1n500 1≤n≤500

输入描述:

输入一行没有空格的字符串。

输出描述:

输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。

示例1

输入:abc
输出:3

解题思路

使用substring方法

算法流程

  1. 使用Scanner类来读取用户输入的整数。
  2. 定义了一个变量num来存储用户输入的整数。
  3. 定义了一个变量result来存储去除重复数字后的结果。
  4. 使用HashSet集合来存储已经出现过的数字,以便判断是否重复。
  5. 使用while循环来遍历整数的每一位数字。
  6. 在循环中,取出当前位的数字,并判断是否已经出现过。
  7. 如果当前位的数字没有出现过,则将其添加到结果中,并将其添加到HashSet集合中。
  8. 最后,输出结果到控制台。

代码

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
        String s = in.nextLine();
            HashSet<Character> uniqueChars = new HashSet<>();
        for (char c : s.toCharArray()) {
            if (c >= 0 && c <= 127 && c != '\n') {
                uniqueChars.add(c);
            }
        }
        System.out.println(uniqueChars.size()); 
    }
}

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O(N)O(N)

  • 其中n是输入字符串的长度。代码中的循环遍历了输入字符串的每个字符,所以时间复杂度是线性的。
  • 空间复杂度:

添加空间复杂度, 示例: O(k)O(k)

  • 其中k是输入字符串中不同字符的数量。代码中使用了一个HashSet来存储不同的字符,HashSet的大小取决于不同字符的数量。在最坏的情况下,所有字符都是不同的,HashSet的大小将等于输入字符串的长度。因此,空间复杂度是线性的。