华为机试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;
}


相关文章
|
容器
华为机试HJ60:查找组成一个偶数最接近的两个素数
华为机试HJ60:查找组成一个偶数最接近的两个素数
华为机试HJ106:字符逆序
华为机试HJ106:字符逆序
127 1
华为机试HJ84:统计大写字母个数
华为机试HJ84:统计大写字母个数
华为机试HJ2:计算某字母出现次数
华为机试HJ2:计算某字母出现次数
|
存储 容器
华为机试HJ23:删除字符串中出现次数最少的字符
华为机试HJ23:删除字符串中出现次数最少的字符
华为机试HJ58:输入n个整数,输出其中最小的k个
华为机试HJ58:输入n个整数,输出其中最小的k个
华为机试HJ86:求最大连续bit数
华为机试HJ86:求最大连续bit数
|
Serverless
华为机试HJ62:查找输入整数二进制中1的个数
华为机试HJ62:查找输入整数二进制中1的个数
|
容器
华为机试HJ93:数组分组
华为机试HJ93:数组分组