Easy to understand - O(N)*len(s) TC
\nfunc numMatchingSubseq(s string, words []string) int {\n    res := 0\n    \n    for _, word := range words {\n        if isSubsequence(word, s) { res++ }\n   
```\nfunc numMatchingSubseq(s string, words []string) int {\n    res := 0\n    \n    for _, word := range words {\n        if isSubsequence(word, s) { res++ }\n    }\n    \n    return res\n}\n\nfunc isSubsequence(s string, t string) bool {\n    left := 0\n    \n    for i := 0; i < len(t); i++ {\n        if left == len(s) { return true }\n        \n        if t[i] == s[left] {\n            left++\n        }    \n    }\n\n    return left == len(s)\n}\n```\n\n**Another one - Faster with map to handle duplicate values**\n```\nfunc numMatchingSubseq(s string, words []string) int {\n    count, wordSet := 0, make(map[string]int)\n    \n    for _, word := range words {\n        wordSet[word]++\n    }\n    \n    for w := range wordSet {\n        if isSubsequence(w, s) {\n            count += wordSet[w]\n        }\n    }\n    \n    return count\n}\n\nfunc isSubsequence(s string, t string) bool {\n    left := 0\n    \n    for i := 0; i < len(t); i++ {\n        if left == len(s) { return true }\n        \n        if t[i] == s[left] {\n            left++\n        }    \n    }\n\n    return left == len(s)\n}\n```
['Binary Search', 'C', 'Go', 'JavaScript']