leet-code/src/main/java/leetcode/editor/cn/SearchSuggestionsSystem.java

107 lines
3.7 KiB
Java
Raw Normal View History

2021-09-06 17:00:27 +08:00
//给你一个产品数组 products 和一个字符串 searchWord products 数组中每个产品都是一个字符串。
//
// 请你设计一个推荐系统,在依次输入单词 searchWord 的每一个字母后,推荐 products 数组中前缀与 searchWord 相同的最多三个产品
//。如果前缀相同的可推荐产品超过三个,请按字典序返回最小的三个。
//
// 请你以二维列表的形式,返回在输入 searchWord 每个字母后相应的推荐产品的列表。
//
//
//
// 示例 1
//
// 输入products = ["mobile","mouse","moneypot","monitor","mousepad"], searchWord
//= "mouse"
//输出:[
//["mobile","moneypot","monitor"],
//["mobile","moneypot","monitor"],
//["mouse","mousepad"],
//["mouse","mousepad"],
//["mouse","mousepad"]
//]
//解释:按字典序排序后的产品列表是 ["mobile","moneypot","monitor","mouse","mousepad"]
//输入 m 和 mo由于所有产品的前缀都相同所以系统返回字典序最小的三个产品 ["mobile","moneypot","monitor"]
//输入 mou mous 和 mouse 后系统都返回 ["mouse","mousepad"]
//
//
// 示例 2
//
// 输入products = ["havana"], searchWord = "havana"
//输出:[["havana"],["havana"],["havana"],["havana"],["havana"],["havana"]]
//
//
// 示例 3
//
// 输入products = ["bags","baggage","banner","box","cloths"], searchWord =
//"bags"
//输出:[["baggage","bags","banner"],["baggage","bags","banner"],["baggage","bags"]
//,["bags"]]
//
//
// 示例 4
//
// 输入products = ["havana"], searchWord = "tatiana"
//输出:[[],[],[],[],[],[],[]]
//
//
//
//
// 提示:
//
//
// 1 <= products.length <= 1000
// 1 <= Σ products[i].length <= 2 * 10^4
// products[i] 中所有的字符都是小写英文字母。
// 1 <= searchWord.length <= 1000
// searchWord 中所有字符都是小写英文字母。
//
// Related Topics 字典树 数组 字符串 👍 84 👎 0
package leetcode.editor.cn;
import java.util.*;
//1268:搜索推荐系统
class SearchSuggestionsSystem {
public static void main(String[] args) {
//测试代码
Solution solution = new SearchSuggestionsSystem().new Solution();
solution.suggestedProducts(new String[]{"mobile", "mouse", "moneypot", "monitor", "mousepad"}, "mouspepad");
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public List<List<String>> suggestedProducts(String[] products, String searchWord) {
Arrays.sort(products);
2021-09-06 19:14:16 +08:00
int index = 0;
String str = searchWord.substring(0, index + 1);
List<List<String>> result = new ArrayList<>();
for (int i = 0; i < products.length; i++) {
if (products[i].startsWith(str)) {
List<String> list = new ArrayList<>();
for (int j = i; j < Math.min(i + 3, products.length); j++) {
if (products[j].startsWith(str)) {
list.add(products[j]);
}
2021-09-06 17:00:27 +08:00
}
2021-09-06 19:14:16 +08:00
index++;
result.add(new ArrayList<>(list));
if (index == searchWord.length()) {
break;
2021-09-06 17:00:27 +08:00
}
2021-09-06 19:14:16 +08:00
i--;
str = searchWord.substring(0, index + 1);
2021-09-06 17:00:27 +08:00
}
}
2021-09-06 19:14:16 +08:00
if (index < searchWord.length()) {
int size = result.size();
for (int i = 0; i < searchWord.length() - size; i++) {
2021-09-06 17:00:27 +08:00
result.add(new ArrayList<>());
}
}
return result;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}