力扣题目链接:https://leetcode.cn/problems/count-the-number-of-consistent-strings/
给你一个由不同字符组成的字符串 allowed
和一个字符串数组 words
。如果一个字符串的每一个字符都在 allowed
中,就称这个字符串是 一致字符串 。
请你返回 words
数组中 一致字符串 的数目。
示例 1:
输入:allowed = "ab", words = ["ad","bd","aaab","baa","badab"] 输出:2 解释:字符串 "aaab" 和 "baa" 都是一致字符串,因为它们只包含字符 'a' 和 'b' 。
示例 2:
输入:allowed = "abc", words = ["a","b","c","ab","ac","bc","abc"] 输出:7 解释:所有字符串都是一致的。
示例 3:
输入:allowed = "cad", words = ["cc","acd","b","ba","bac","bad","ac","d"] 输出:4 解释:字符串 "cc","acd","ac" 和 "d" 是一致字符串。
提示:
1 <= words.length <= 104
1 <= allowed.length <= 26
1 <= words[i].length <= 10
allowed
中的字符 互不相同 。words[i]
和 allowed
只包含小写英文字母。因为字符集为26个小写英文字母,因此我们开辟大小为 26 26 26的数组,来记录每个字母是否在 a l l o w e d allowed allowed中出现过
bool bin[26] = {false};
之后遍历一遍 a l l o w e d allowed allowed,将出现过的字母标记为 t r u e true true
for (char& c : allowed)
bin[c - 'a'] = true;
接下来就能愉快地处理每一个字符串了
对于字符串数组中的某一个字符串,使用一个变量 o k = t r u e ok = true ok=true来记录字符串是否有“不能出现的字符”
遍历字符串,如果某个字符没有在 a l l o w e d allowed allowed中出现过( b i n bin bin为 f a l s e false false),那么就将 o k ok ok置为 f a l s e false false并结束遍历这个字符串
若字符串遍历结束 o k ok ok仍为 t r u e true true,那么答案数量就加一
int ans = 0;
for (string& s : words) { // 遍历字符串数组中的每一个字符串s
bool ok = true;
for (char& c : s) {
if (!bin[c - 'a']) { // 未在allowed中出现过的字符出现过
ok = false;
break;
}
}
ans += ok;
}
class Solution {
public:
int countConsistentStrings(string& allowed, vector<string>& words) {
bool bin[26] = {false};
for (char& c : allowed)
bin[c - 'a'] = true;
int ans = 0;
for (string& s : words) {
bool ok = true;
for (char& c : s) {
if (!bin[c - 'a']) {
ok = false;
break;
}
}
ans += ok;
}
return ans;
}
};
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127743936