哈希思想
一次遍历
a
l
l
o
w
e
d
allowed
allowed ,将
a
l
l
o
w
e
d
allowed
allowed 出现的字符保存到哈希集合
h
h
h 。
一次遍历
w
o
r
d
s
words
words ,对每个字符串
w
o
r
d
word
word 进行遍历。如果
w
o
r
d
word
word 出现
h
h
h 中没有的字符,
w
o
r
d
word
word 就不是一致字符串。反之 ,
w
o
r
d
word
word 就是一致字符串。
代码展示
class Solution {
public:
int countConsistentStrings(string allowed, vector<string>& words) {
int h[26] = { 0 };
for (auto x : allowed) {
int i = x - 'a';
h[i]++;
}
int ans = 0;
for (auto word : words) {
int i = 0;
for (auto x : word) {
i = x - 'a';
if (0==h[i]) break;
}
if (h[i]) ans++;
}
return ans;
}
};
博主致语
理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。
AC
复杂度分析
- 时间复杂度: O ( n + ∑ m i ) O(n+\sum m_i) O(n+∑mi), n n n 是 a l l o w e d allowed allowed 的长度, m i m_i mi 是 w o r d s words words 中每一个 w o r d word word 的长度。一次遍历 a l l o w e d allowed allowed 的时间复杂度是 O ( n ) O(n) O(n) ,一次遍历 w o r d s words words 中每一个 w o r d word word 的时间复杂度是 O ( ∑ m i ) O(\sum m_i) O(∑mi) 。
- 空间复杂度: O ( n ) O(n) O(n)。最坏情况 n = 26 n=26 n=26 ,对应 26 26 26 个字母的空间。