记5.28leetcode简单题
5.28
因为Ipad暂时不能使用,所以把leetcode的刷题记录放在博客上,记录自己这个只敢刷简单题的菜鸟进步的过程。
1.判断句子是否全字母
因为有段时间没有刷力扣了,所以随机了一个简单题来练练手,然后刚好是我最熟悉的字母存在的题,然后就直接A了。
思路:
这个题目很简单,没有什么很厉害的方法,这个题目的要求就是判断这个句子的小写字母是否全部出现,所以我们可以分为两步:
1.用int数组存放所有字母出现的次数
2.当某个字母出现次数为0就false
然后这个题目就A了!!!
代码:
class Solution {
public boolean checkIfPangram(String sentence) {
int[] Hash = new int[26];
for(Character c : sentence.toCharArray()){
Hash[c-'a']++;
}
for(int i : Hash){
if(i == 0){
return false;
}
}
return true;
}
}
class Solution {
public:
bool checkIfPangram(string s) {
int Hash[26]={0};
for(int i = 0; i < s.length(); i++){
Hash[s[i]-'a']++;
}
for(int j = 0; j < 26; j++){
if(Hash[j] == 0){
return false;
}
}
return true;
}
};
c++小tips:
- 静态数组Hash一定要记得初始化0
- 不能用for each,老老实实一个个的遍历string的下标,c++里面string可以看为一个数组
方法实现:
我这里用了Hash数组的来存放字母出现的次数,我们要存放a-z的次数,我们可以用(char - ‘a')的方式来表示26个字母,通过减去a的ASCLL码值可以表示a-z的顺序关系,从而将a-z存放进数组下标0-25,文字表达可能不是很清晰,可以通过下图来理解:
然后接下来我们遍历句子sentence的每一个字母,用foreach来遍历,然后注意这里的toCharArray()方法将string转为了字符数组形式,因为foreach的:后面需要接相同类型的对象,存放完字母的出现次数,就可以遍历所有的值,发现有值为0说明缺少了这个字母,return false。