Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
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 have common prefix with searchWord
. If there are more than three products with a common prefix return the three lexicographically minimums products.
Return a list of lists of the suggested products after each character of searchWord
is typed.
Example 1:
Input: products = ["mobile","mouse","moneypot","monitor","mousepad"], searchWord = "mouse"
Output: [
["mobile","moneypot","monitor"],
["mobile","moneypot","monitor"],
["mouse","mousepad"],
["mouse","mousepad"],
["mouse","mousepad"]
]
Explanation: products sorted lexicographically = ["mobile","moneypot","monitor","mouse","mousepad"]
After typing m and mo all products match and we show user ["mobile","moneypot","monitor"]
After typing mou, mous and mouse the system suggests ["mouse","mousepad"]
Example 2:
Input: products = ["havana"], searchWord = "havana"
Output: [["havana"],["havana"],["havana"],["havana"],["havana"],["havana"]]
Example 3:
Input: products = ["bags","baggage","banner","box","cloths"], searchWord = "bags"
Output: [["baggage","bags","banner"],["baggage","bags","banner"],["baggage","bags"],["bags"]]
Constraints:
1 <= products.length <= 1000
1 <= products[i].length <= 3000
1 <= sum(products[i].length) <= 2 * 104
products
are unique.products[i]
consists of lowercase English letters.1 <= searchWord.length <= 1000
searchWord
consists of lowercase English letters. vector<vector<string>> suggestedProducts(vector<string>& A, string searchWord) {
auto it = A.begin();
sort(it, A.end());
vector<vector<string>> res;
string cur = "";
for (char c : searchWord) {
cur += c;
vector<string> suggested;
it = lower_bound(it, A.end(), cur);
for (int i = 0; i < 3 && it + i != A.end(); i++) {
string& s = *(it + i);
if (s.find(cur)) break;
suggested.push_back(s);
}
res.push_back(suggested);
}
return res;
}
public List<List<String>> suggestedProducts(String[] products, String searchWord) {
List<List<String>> res = new ArrayList<>();
TreeMap<String, Integer> map = new TreeMap<>();
Arrays.sort(products);
List<String> productsList = Arrays.asList(products);
for (int i = 0; i < products.length; i++) {
map.put(products[i], i);
}
String key = "";
for (char c : searchWord.toCharArray()) {
key += c;
String ceiling = map.ceilingKey(key);
String floor = map.floorKey(key + "~");
if (ceiling == null || floor == null) break;
res.add(productsList.subList(map.get(ceiling), Math.min(map.get(ceiling) + 3, map.get(floor) + 1)));
}
while (res.size() < searchWord.length()) res.add(new ArrayList<>());
return res;
}
def suggestedProducts(self, A, word):
A.sort()
res, prefix, i = [], '', 0
for c in word:
prefix += c
i = bisect.bisect_left(A, prefix, i)
res.append([w for w in A[i:i + 3] if w.startswith(prefix)])
return res
In our experience, we suggest you solve this Search Suggestions System LeetCode Solution and gain some new skills from Professionals completely free and we assure you will be worth it.
If you are stuck anywhere between any coding problem, just visit Queslers to get the Search Suggestions System LeetCode Solution
I hope this Search Suggestions System LeetCode Solution would be useful for you to learn something new from this problem. If it helped you then don’t forget to bookmark our site for more Coding Solutions.
This Problem is intended for audiences of all experiences who are interested in learning about Data Science in a business context; there are no prerequisites.
Keep Learning!
More Coding Solutions >>