Files
cpp-flashcards/org/study_deck_02/dsa/arrays-hashing/1408-string-matching-in-an-array.org
T
2026-06-08 11:38:09 +08:00

2.3 KiB

TODO 1408. String Matching in an Array   easy

Given an array of string words, return all strings in/ words /that are a substring of another word. You can return the answer in any order.

Example 1:

Input: words = ["mass","as","hero","superhero"]
Output: ["as","hero"]
Explanation: "as" is substring of "mass" and "hero" is substring of "superhero".
["hero","as"] is also a valid answer.

Example 2:

Input: words = ["leetcode","et","code"]
Output: ["et","code"]
Explanation: "et", "code" are substring of "leetcode".

Example 3:

Input: words = ["blue","green","bu"]
Output: []
Explanation: No string of words is substring of another string.

Constraints:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 30
  • words[i] contains only lowercase English letters.
  • All the strings of words are unique.

TODO Approach

Write your approach here.

TODO Python

from collections import defaultdict as dd
class Solution:
    def stringMatching(self, words: List[str]) -> List[str]:
        words = reversed(sorted(words))
        def squash(word, trie):
            lst = []
            for c in word:
                lst.append([trie, ''])
                for i in range(len(lst)):
                    lst[i][0] = lst[i][0][c]
                    lst[i][1] += c
                    if not lst[i][0]['ads']:
                        lst[i][0]['ads'] = {lst[i][1]: [word]}
                    else:
                        lst[i][0]['ads'][lst[i][1]].append(word)
        def in_trie(word, trie):
            for c in word:
                if c not in trie:
                    return []
                trie = trie[c]
            return [(word, bw) for bw in trie['ads'][word]]
        trie_maker = lambda: dd(trie_maker)
        trie = trie_maker()
        ans = []
        for s in words:
            ans += in_trie(s, trie)
            squash(s, trie)
        return ans

**

TODO C++

class Solution {
public:
    vector<string> stringMatching(vector<string>& words) {
        
    }
};