### LeetCode Challenge #1268. Search Suggestions System

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"
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"]]
Explanation: The only word "havana" will be always suggested while typing the search word.
```

Constraints:

• `1 <= products.length <= 1000`
• `1 <= products[i].length <= 3000`
• `1 <= sum(products[i].length) <= 2 * 104`
• All the strings of `products` are unique.
• `products[i]` consists of lowercase English letters.
• `1 <= searchWord.length <= 1000`
• `searchWord` consists of lowercase English letters.
##### Video Solution
###### C++ Solution
```				```
class Solution {
public:
vector<vector<string>> suggestedProducts(vector<string>& products, string searchWord) {
auto itr=products.begin();
sort(itr,products.end());
vector<vector<string>> result;
string currStr="";

for(char ch:searchWord)
{
currStr+=ch;
vector<string> suggestion;
itr = lower_bound(itr,products.end(),currStr);

for(int i=0; i<3 and (itr+i)!=products.end(); i++)
{
string &s= *(itr+i);
if(s.find(currStr))break;
suggestion.push_back(s);
}

result.push_back(suggestion);
}
return result;
}
};
```
```