zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【华为OD机试】1009 - 字符个数统计

字符统计华为 机试 OD 个数
2023-09-14 09:05:30 时间


🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
💖系列专栏:华为OD机试(Java&Python&C语言)

一、题目


🔸题目描述

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


🔸输入输出

输入
输入一行没有空格的字符串。
 
输出
输出 输入字符串 中范围在(0~127,包括0和127)字符的种数


🔸样例1

输入
abc


输出
3

🔸样例2

输入
aaa


输出
1

二、代码参考

import java.util.Scanner;
import java.util.BitSet;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.next();
        //总共有128个字符。字需要用128位
        BitSet bitSet = new BitSet(128);
        for (char c : line.toCharArray()) {
            //判断字符c是否已出现
            if (!bitSet.get(c)) {
                //未出现就设置为已出现
                bitSet.set(c);
            }
        }
        //统计有多少字符已出现过
        System.out.println(bitSet.cardinality());
    }
}
--------------------------------------------------------



def count_character(str):
    string = ''.join(set(str))  # 去重后以字符串的形式
    count = 0                   # 开始计数
    for item in string:
        if 0 <= ord(item) <= 127: # ASCII码范围要求
            count += 1         # 计数
    return count 

str = input()
print(count_character(str))
    

--------------------------------------------------------------

/**
运用的是HASH表的思想,因为只有最多只有128种数据,所以只需维护一个大小为128的字符数组,让输入的字符作为数组下标,
取出这个下标数组中的字符直接与输入的字符比较(不用for循环从头再查),如果相同则跳过,不同则赋值,让结果++,最后遇到'\n'结束循环,返回结果即可
*/
#include<stdio.h>
#define MAX_TABLE_SIZE 128

int main(){
    char hash[MAX_TABLE_SIZE] = {-1};
    char c = 0;
    int num = 0;
    while(~scanf("%c",&c)){
        if(c == '\n') break;
        if(hash[(int)c] != c){
            hash[(int)c] = c;
            num++;
        }
    }
    printf("%d\n",num);
}



请添加图片描述


作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习