public int numMatchingSubseq(String S, String[] words) {
Map<Character, Queue<String>> map = new HashMap<>();
for (char c : S.toCharArray()) {
if (!map.containsKey(c)) {
map.put(c, new LinkedList<>());
for (String word : words) {
if (word.length() > S.length()) continue;
if (map.containsKey(word.charAt(0))) {
map.get(word.charAt(0)).add(word);
for (char c : S.toCharArray()) {
Queue<String> queue = map.get(c);
for (int i = 0; i < size; i++) {
String curWord = queue.remove();
if (curWord.length() == 1) {
else if (map.containsKey(curWord.charAt(1))) {
map.get(curWord.charAt(1)).add(curWord.substring(1));