前言

虽然很简单,但是这个思路没有见过,暂且记下

题目

image
判断句子是否为全字母句 https://leetcode.cn/problems/check-if-the-sentence-is-pangram/description/

我的思路

创建一个26位数组,然后使用char作为索引操作数组,再使计数加一,以下是java版本

class Solution {
    public boolean checkIfPangram(String sentence) {
        if(sentence.length() < 26)
            return false;
        int[] timesArr = new int[26];
        int count = 0;
        for(int i = 0;i<sentence.length();i++){
            if(timesArr[sentence.charAt(i) - 'a'] == 0){
                timesArr[sentence.charAt(i) - 'a'] += 1;
                count += 1;
            }
        }
        if(count == 26)
            return true;
        return false;
    }
}

别人的思路

使用二进制作为一个存储结构,然后对每个字符与这个二进制数进行异或,最后只需要判断是否等于即可



class Solution:
    def checkIfPangram(self, sentence: str) -> bool:
        state = 0
        for c in sentence:
            state |= 1 << (ord(c) - ord('a'))
        return state == (1 << 26) - 1

# 作者:力扣官方题解
# 链接:https://leetcode.cn/problems/check-if-the-sentence-is-pangram/solutions/2017130/pan-duan-ju-# zi-shi-fou-wei-quan-zi-mu-ju-xc7a/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。