LeetCode 1684 统计一致字符串的数目[位运算] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1684 统计一致字符串的数目[位运算] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
虽然是简单题,但是解法很有意义,第一种是用26位字母数组记录字母是否存在,然后一个个判断,代码如下:

class Solution 
public:
    int countConsistentStrings(string allowed, vector<string>& words) 
        int res = 0;
        vector<int> count(26, 0);
        for(int i = 0; i < allowed.size(); i ++) 
            count[allowed[i] - 'a'] = 1;
        
        for(string & word : words) 
            bool flag = true;
            for(int i = 0; i < word.size(); i ++) 
                if(!count[word[i] - 'a']) 
                    flag = false;
                    break;
                
            
            if(flag) 
                res ++;
            
        
        return res;
    
;

上面的代码效率还是低了,可以用一个32位整数mask来存放字母,对应位数转为1,遍历整个words,将每个word的mask和原来的mask与操作,如果没变还是原来mask,说明一致,代码如下:

class Solution 
public:
    int countConsistentStrings(string allowed, vector<string>& words) 
        int mask = 0;
        int res = 0;
        for(char& c : allowed) 
            mask |= 1 << c - 'a';
        
        for(auto& word : words) 
            int mask1 = 0;
            for(char& c : word) 
                mask1 |= 1 << c - 'a';
            
            if((mask | mask1) == mask) 
                res ++;
            
        
        return res;
    
;

以上是关于LeetCode 1684 统计一致字符串的数目[位运算] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode1684. 统计一致字符串的数目(C++)

leetcode简单1684统计一致字符串的数目

LeetCode 1684 统计一致字符串的数目[位运算] HERODING的LeetCode之路

算法1684. 统计一致字符串的数目(java / c / c++ / python / go / rust)

算法1684. 统计一致字符串的数目(java / c / c++ / python / go / rust)

「 每日一练,快乐水题 」1684. 统计一致字符串的数目