Problem: HJ10 字符个数统计
题目描述
描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。
数据范围:
输入描述:
输入一行没有空格的字符串。
输出描述:
输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。
示例1
输入:
abc
输出:3
解题思路
使用substring方法
算法流程
- 使用Scanner类来读取用户输入的整数。
- 定义了一个变量num来存储用户输入的整数。
- 定义了一个变量result来存储去除重复数字后的结果。
- 使用HashSet集合来存储已经出现过的数字,以便判断是否重复。
- 使用while循环来遍历整数的每一位数字。
- 在循环中,取出当前位的数字,并判断是否已经出现过。
- 如果当前位的数字没有出现过,则将其添加到结果中,并将其添加到HashSet集合中。
- 最后,输出结果到控制台。
代码
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());
}
}
复杂度
- 时间复杂度:
添加时间复杂度, 示例:
- 其中n是输入字符串的长度。代码中的循环遍历了输入字符串的每个字符,所以时间复杂度是线性的。
- 空间复杂度:
添加空间复杂度, 示例:
- 其中k是输入字符串中不同字符的数量。代码中使用了一个HashSet来存储不同的字符,HashSet的大小取决于不同字符的数量。在最坏的情况下,所有字符都是不同的,HashSet的大小将等于输入字符串的长度。因此,空间复杂度是线性的。