持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
一、问题描述
给定一个长度为 n
的由大小写英文字母构成的字符串。
请你判断,该字符串是否包含了全部 26
个英文字母?
注意,无论某个英文字母是以大写还是小写形式出现在字符串
中,均视为该字符串包含此字母。
题目链接:26 个英文字母
二、题目要求
样例 1
12
toosmallword
NO
样例 2
35
TheQuickBrownFoxJumpsOverTheLazyDog
YES
考察
1.字符串、哈希
2.建议用时10~25min
三、问题分析
这一题就是一个简单的字符串模拟分析问题,如果题目改成输入的字符串全部是小写的话,那我们可以直接使用哈希表map
记录一下26个字母是否出现,出现置为1
,默认值为0。
到最后,我们只需要遍历26个字母的哈希值,判断是否有0存在就可以了。
这一题,比较容易混淆的一个点就是字母的大小写问题,常规方法我们可以使用遍历判断。而对于C++丰富的STL库来说,只需要一个小小的调用
,就可以完美解决
问题。
-
附录:
定义一个字符串`s`=abcdEFGhijk transform(s.begin(),s.end(),s.begin(),::tolower);//字符串全部小写 abcdefghijk transform(s.begin(),s.end(),s.begin(),::toupper);//字符串全部小写 ABCDEFGHIJK
使用的时候,要注意填写头文件#include<cctype>//类库
,或者图方便直接调用万能头文件
#include<bits/stdc++.h>
就OK了!
四、编码实现
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
#include<cctype>//类库
using namespace std;
int main()
{
int n;
string s;
cin>>n>>s;
transform(s.begin(),s.end(),s.begin(),::tolower);//字符串全部小写
map<char,int>m;
for(int i=0;i<n;i++)//哈希标值
{
m[s[i]]=1;
}
for(char i='a';i<='z';i++)//计数判断
{
if(m[i]==0)
{
cout<<"NO";//输出结果
return 0;
}
}
cout<<"YES";
return 0;
}