#计算某字符出现次数#__huawei_no.2-1
计算某字符出现次数
https://www.nowcoder.com/practice/a35ce98431874e3a820dbe4b2d0508b1
#include <iostream> #include <unordered_map> using namespace std; int main() { string str ; char s; getline(cin,str); cin >> s; unordered_map<char,int>mp; for(auto i : str){ if( i >= 'A' && i <= 'Z'){ i = i -'A' +'a'; } mp[i]++; } if(s >= 'A' && s <= 'Z'){ s = s -'A' +'a'; } cout << mp[s] <<endl; } // 64 位输出请用 printf("%lld")
1、首先,题目的要求是读取两个,一个字符串,一个字符,要分开来读,不然解不了这个题;
2 、另外,这个题一眼能够想到是哈希表来做,说明之前的训练是有进步的,哈希表确实快,但是还是要进一步的加深对哈希表的掌握和认识,想到快,但是用起来不够快;
3、题目中是不区分大小写的,所以,在细节上还需要再把握一下,将字符统一转一个格式,这样方便操作;
4、将 unordered_map<char, int>
更改为 unordered_map<char, size_t>
的好处在于类型匹配和数据表示的准确性。
以下是几个原因说明为什么使用 size_t
可能是更好的选择:
- 类型匹配:size_t 是一种无符号整数类型,它是 C++ 标准库中用来表示大小的类型。在 C++ 中,size_t 通常用于数组索引、循环计数、容器大小等。因此,当你在统计字符出现的次数时,使用 size_t 可以提供类型上的匹配,因为字符的数量不可能是负数。
- 避免潜在的符号扩展问题:如果使用 int 类型,它是有符号的,可能会在某些情况下导致不必要的符号扩展问题。例如,当 int 被转换为更大的类型时,它的符号位会被扩展,这可能会导致不必要的复杂性。
- 更好的性能:在某些平台上,无符号整数类型的操作可能比有符号整数类型的操作更快,因为它们不需要处理符号位。
- 更清晰的意图:使用 size_t 类型可以清楚地表明变量是用来表示大小的,这提高了代码的可读性和意图的明确性。
- 容器大小兼容性:C++ 标准库中的容器(如 vector、string、unordered_map 等)使用 size_t 来表示它们的大小。因此,使用 size_t 与这些容器的接口保持一致。