题干
给你一个由不同字符组成的字符串 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;
}
};