华为机试HJ10:字符个数统计

简介: 华为机试HJ10:字符个数统计

题目描述:

编写一个函数,统计所输入字符串中不同字符的数量,字符在ASCII码的范围为0到127。

比如,字符串1235asba,有1、2、3、5、a、s、b这七种,输出7。

输入描述:

输入字符串。

输出描述:

输出字符种类数。

示例:

输入:123aaa

输出:4

解题思路:

一种笨方法是用map或者其他容器,挨个分析字符串的字符,如果对应字符没出现过,其值为0,出现过的为1,每次将值变为1时记一次数,得到结果。

还有一种用哈希表来做,这个方法更快更简洁,直接放里面塞char,自动去重,最后输出下hash_set的个数即可。

测试代码:

map解法

#include <iostream>
#include <map>
using namespace std;
int main()
{
    map<char,int> m;
    string str;
    getline(cin,str);
    int number=0;
    for(int i=0;i<str.length();++i)
    {
        if(m[str[i]]==0)
        {
            m[str[i]]=1;
            number++;
        }
    }
    cout<<number;
    return 0;
}

hash_set

#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
    string s; 
    cin >> s;
    unordered_set<char> u;
    for(char c : s)
        if(c >= 0 && c <= 127) 
              u.insert(c);
    cout << u.size() << endl;
    return 0;
}


相关文章
|
4天前
【每日一题Day161】LC1641统计字典序元音字符串的数目 | 数位dp
【每日一题Day161】LC1641统计字典序元音字符串的数目 | 数位dp
28 0
|
4天前
【每日一题Day225】LC2559统计范围内的元音字符串数 | 前缀和 二分查找
【每日一题Day225】LC2559统计范围内的元音字符串数 | 前缀和 二分查找
31 0
|
7月前
华为机试HJ84:统计大写字母个数
华为机试HJ84:统计大写字母个数
|
7月前
华为机试HJ40:统计字符
华为机试HJ40:统计字符
|
7月前
|
C++
华为机试HJ2:计算某字母出现次数
华为机试HJ2:计算某字母出现次数
|
7月前
|
存储 容器
华为机试HJ23:删除字符串中出现次数最少的字符
华为机试HJ23:删除字符串中出现次数最少的字符
|
7月前
华为机试HJ58:输入n个整数,输出其中最小的k个
华为机试HJ58:输入n个整数,输出其中最小的k个
|
7月前
|
容器
华为机试HJ92:在字符串中找出连续最长的数字串
华为机试HJ92:在字符串中找出连续最长的数字串
|
7月前
|
Serverless
华为机试HJ62:查找输入整数二进制中1的个数
华为机试HJ62:查找输入整数二进制中1的个数
|
7月前
华为机试HJ65:查找两个字符串a,b中的最长公共子串
华为机试HJ65:查找两个字符串a,b中的最长公共子串