Easy to understand java solution
Use two sets to store the words that are matched and not matched. \n\nisSubseq - computes if a word is a subsequence of another word in O(n).\n\n\nclass Solutio
Use two sets to store the words that are matched and not matched. \n\nisSubseq - computes if a word is a subsequence of another word in O(n).\n\n```\nclass Solution {\n    \n    Set<String> matches = new HashSet<>();\n    Set<String> noMatches = new HashSet<>();\n    \n    public int numMatchingSubseq(String s, String[] words) {\n        int count = 0;\n        for (String word: words) {\n            if (matches.contains(word)) {\n                count++;\n            } else if (noMatches.contains(word)) {\n                continue;\n            } else {\n                boolean found = isSubseq(s, 0, word, 0);\n                if (found) {\n                    matches.add(word);\n                    count++;\n                } else {\n                    noMatches.add(word);\n                }                    \n            }\n        }\n        return count;\n    }\n    \n    public boolean isSubseq(String s, int sIndex, String word, int wIndex) {\n        if (wIndex == word.length()) {\n            return true;\n        }\n        \n        if (sIndex >= s.length()) {\n            return false;\n        }\n        \n        if (word.charAt(wIndex) == s.charAt(sIndex)) {\n            return isSubseq(s, sIndex+1, word, wIndex+1);\n        }\n        \n        return isSubseq(s, sIndex+1, word, wIndex);\n    }\n    \n}\n```
[]