792. Number of Matching Subsequences
Given string S and a dictionary of words words, find the number of words[i] that is a subsequence of S.
Example :
Input:
S = "abcde"
words = ["a", "bb", "acd", "ace"]
Output: 3
Explanation: There are three words in words that are a subsequence of S: "a", "acd", "ace".Note:
All words in
wordsandSwill only consists of lowercase letters.The length of
Swill be in the range of[1, 50000].The length of
wordswill be in the range of[1, 5000].The length of
words[i]will be in the range of[1, 50].
// Optimized Brute Force with Hashset
int numMatchingSubseq(string S, vector<string>& words) { // time: O(words_len * S_len); space: O(words_len)
int res = 0, n = S.length();
unordered_set<string> valid, invalid;
for (string word : words) {
if (valid.count(word) || invalid.count(word)) {
if (valid.count(word)) ++res;
continue;
}
// Use two pointers to check
int i = 0, j = 0, m = word.length();
while (i < n && j < m) {
if (word[j] == S[i]) ++j;
++i;
}
if (j == m) {
++res;
valid.insert(word);
} else invalid.insert(word);
}
return res;
}Last updated
Was this helpful?