g0701_0800.s0792_number_of_matching_subsequences.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0701_0800.s0792_number_of_matching_subsequences;
// #Medium #String #Hash_Table #Sorting #Trie #2022_03_26_Time_92_ms_(84.26%)_Space_118_MB_(25.03%)
import java.util.ArrayList;
import java.util.List;
/**
* 792 - Number of Matching Subsequences\.
*
* Medium
*
* Given a string `s` and an array of strings `words`, return _the number of_ `words[i]` _that is a subsequence of_ `s`.
*
* A **subsequence** of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.
*
* * For example, `"ace"` is a subsequence of `"abcde"`.
*
* **Example 1:**
*
* **Input:** s = "abcde", words = ["a","bb","acd","ace"]
*
* **Output:** 3
*
* **Explanation:** There are three strings in words that are a subsequence of s: "a", "acd", "ace".
*
* **Example 2:**
*
* **Input:** s = "dsahjpjauf", words = ["ahjpjau","ja","ahbwzgqnuk","tnmlanowax"]
*
* **Output:** 2
*
* **Constraints:**
*
* * 1 <= s.length <= 5 * 104
* * `1 <= words.length <= 5000`
* * `1 <= words[i].length <= 50`
* * `s` and `words[i]` consist of only lowercase English letters.
**/
@SuppressWarnings("unchecked")
public class Solution {
public int numMatchingSubseq(String s, String[] words) {
List[] buckets = new ArrayList[26];
for (int i = 0; i < buckets.length; i++) {
buckets[i] = new ArrayList<>();
}
for (String word : words) {
char start = word.charAt(0);
buckets[start - 'a'].add(new Node(word, 0));
}
int result = 0;
for (char c : s.toCharArray()) {
List currBucket = buckets[c - 'a'];
buckets[c - 'a'] = new ArrayList<>();
for (Node node : currBucket) {
node.index++;
if (node.index == node.word.length()) {
result++;
} else {
char start = node.word.charAt(node.index);
buckets[start - 'a'].add(node);
}
}
}
return result;
}
private static class Node {
String word;
int index;
public Node(String word, int index) {
this.word = word;
this.index = index;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy