每日一题——1684.统计一致字符串的数目

题干

给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是一致字符串

请你返回 words 数组中一致字符串的数目。




思路

直接set存储字符

再一一对照遍历即可


不过,看到官方给的一种解法:

因为这里要求的只有26个字母,所以可以用一个int整型的32位来标记是否有当前字母

不过缺点,就是会降低一点点代码的可读性吧hhhh


代码:

//    我的解法
class Solution {
public:
    int countConsistentStrings(string allowed, vector<string>& words) {
        unordered_set<char> set_;
        for (auto& a: allowed) {
            set_.insert(a);
        }

        int ans{};
        for (auto& word: words) {
            for (auto& w: word) {
                if (!set_.count(w)) {
                    -- ans;
                    break;
                }
            }
            ++ ans;
        }

        return ans;
    }
};

//    官方最优解
class Solution {
public:
    int countConsistentStrings(string allowed, vector<string>& words) {
        int set_{};
        for (auto& a: allowed) {
            set_ |= 1 << (a - 'a');
        }

        int ans{};
        for (auto& word: words) {
            for (auto& w: word) {
                if ((set_ & (1 << (w - 'a'))) == 0) {
                    -- ans;
                    break;
                }
            }
            ++ ans;
        }
        return ans;
    }
};

 上一篇
每日一题——764.最大加号标志 每日一题——764.最大加号标志
题干在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1。mines[i] = [xi, yi]表示 grid[xi][yi] == 0 返回 grid 中包含 1 的最大的 轴对齐 加
2022-11-09
下一篇 
每日一题——816.模糊坐标 每日一题——816.模糊坐标
题干我们有一些二维坐标,如 "(1, 3)" 或 "(2, 0.5)",然后我们移除所有逗号,小数点和空格,得到一个字符串S。返回所有可能的原始字符串到一个列表中。 原始的坐标表示法不会存在多余的零,
2022-11-07
  目录