AAlgoLoopSpaced repetition for LeetCode
MEDIUMTrieLeetCode ↗

Search Suggestions System

The key idea

Sort the products once so any matching set is already lexicographically ordered; then for each prefix keep only the products that start with it and take the first 3. Sorting turns "3 smallest" into "first 3 still matching".

Problem

You are given an array of strings products and a string searchWord.

Design a system that suggests at most three product names from products after each character of searchWord is typed. Suggested products should share a common prefix with the already typed part of searchWord. If there are more than three products with a common prefix, return the three lexicographically smallest ones.

Return a list of lists of the suggested products after each character of searchWord is typed.

Constraints

Examples

Input: products = ["mobile","mouse","moneypot","monitor","mousepad"], searchWord = "mouse" Output: [["mobile","moneypot","monitor"],["mobile","moneypot","monitor"],["mouse","mousepad"],["mouse","mousepad"],["mouse","mousepad"]]
Input: products = ["havana"], searchWord = "havana" Output: [["havana"],["havana"],["havana"],["havana"],["havana"],["havana"]]

Complexity

Time: O(n*m + m^2) Space: O(n*m)

See the full solution

410310
Step-by-step visualization
Start free →

More Trie problems