题目
- 题目描述
- 编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
- 例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。
- 输入描述:
输入一行没有空格的字符串。 - 输出描述:
输出范围在(0~127)字符的个数。 - 示例1
- 输入
abc - 输出
3
代码
下面最优解是利用数组思想,数组思想特别重要,做到这里已经有很多算法利用了数组的思想:
package org.lht.boot.lang.suanfa;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
/**
* @author haitao.li
* @description: 题目描述
* 编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。
* 不在范围内的不作统计。多个相同的字符只计算一次
* 例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。
* 输入描述:
* 输入一行没有空格的字符串。
* <p>
* 输出描述:
* 输出范围在(0~127)字符的个数。
* <p>
* 示例1
* 输入
* <p>
* abc
* 输出
* <p>
* 3
* @date 2021/4/13 9:36
*/
public class Huawei字符个数统计 {
/**
* 我自己的解法(牛客运行最快的也是此解法)
* 数组解法: 牛客的运行结果稍微好于利用Set结合解法
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
int[] arr = new int[127];
int total = 0;
for (int i = 0; i < str.length(); i++) {
int n = str.charAt(i);
if (arr[n] != 1) {
total++;
arr[n] = 1;
}
}
System.out.println(total);
}
/**
* 利用set集合解法
*/
// public static void main(String[] args) throws IOException {
//
// BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// String str = reader.readLine();
// Set<Character> set=new HashSet<>();
// for (int i = 0; i < str.length(); i++) {
// set.add(str.charAt(i));
// }
// System.out.println(set.size());
// }
}