leet-code/src/main/java/leetcode/editor/cn/SearchSuggestionsSystem.java
huangge1199@hotmail.com 2a3f143b2f 1268:搜索推荐系统
2021-09-06 19:14:16 +08:00

107 lines
3.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//给你一个产品数组 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);
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]);
}
}
index++;
result.add(new ArrayList<>(list));
if (index == searchWord.length()) {
break;
}
i--;
str = searchWord.substring(0, index + 1);
}
}
if (index < searchWord.length()) {
int size = result.size();
for (int i = 0; i < searchWord.length() - size; i++) {
result.add(new ArrayList<>());
}
}
return result;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}