记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。

完成(c++要快一点)

原文地址:https://www.cnblogs.com/husiyu/p/14822021.html