0
点赞
收藏
分享

微信扫一扫

笔试算法《字符个数统计》


题目

  • 题目描述
  • 编写一个函数,计算字符串中含有的不同字符的个数。字符在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());
// }
}

笔试算法《字符个数统计》_java


举报

相关推荐

0 条评论