Files
cpp-flashcards/org/study_deck_02/dsa/arrays-hashing/1408-string-matching-in-an-array.org
T

98 lines
2.3 KiB
Org Mode
Raw Normal View History

2026-06-01 18:12:40 +08:00
#+ANKI_DECK: study_deck_02
* TODO 1408. String Matching in an Array :easy:
:PROPERTIES:
:NEETCODE: [[file:../../roadmap.org::*1408. String Matching in an Array][1408. String Matching in an Array]]
:END:
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:*
#+begin_src
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.
#+end_src
*Example 2:*
#+begin_src
Input: words = ["leetcode","et","code"]
Output: ["et","code"]
Explanation: "et", "code" are substring of "leetcode".
#+end_src
*Example 3:*
#+begin_src
Input: words = ["blue","green","bu"]
Output: []
Explanation: No string of words is substring of another string.
#+end_src
*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
#+begin_src python
2026-06-05 22:18:39 +08:00
from collections import defaultdict as dd
class Solution:
def stringMatching(self, words: List[str]) -> List[str]:
2026-06-05 22:18:39 +08:00
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
#+end_src
2026-06-05 22:18:39 +08:00
**
** TODO C++
#+begin_src cpp
class Solution {
public:
vector<string> stringMatching(vector<string>& words) {
}
};
#+end_src