Medium
Number of Matching Subsequences — Python
Full explanation · Time O(n + w) · Space O(k)
# Time: O(n + w), n is the size of S, w is the size of words
# Space: O(k), k is the number of words
import collections
class Solution(object):
def numMatchingSubseq(self, S, words):
"""
:type S: str
:type words: List[str]
:rtype: int
"""
waiting = collections.defaultdict(list)
for word in words:
it = iter(word)
waiting[next(it, None)].append(it)
for c in S:
for it in waiting.pop(c, ()):
waiting[next(it, None)].append(it)
return len(waiting[None])