1. 里程商城为了方便客户更快速查找到所需商品,希望实现一个根据用户输入,前缀匹配商品名的功能,用户可能输入多个关键词,则每个关键词分别进行匹配,分别输出结果。现给定商品名称数组、用户输入的关键词数组,输出每个关键词的匹配结果。(待查询的商品信息可能非常多) 示例1 输入:["huawei phone","huawei router","apple iphone","xiaomi mix"],["huawei","apple"] 返回值:[["huawei phone","huawei router"],["apple iphone"]] 备注: 字典dict及被搜索的字符串中都只包含小写字母与空格。 用java代码实现
时间: 2023-02-08 07:52:06 浏览: 181
首先,我们可以定义一个类似于字典树的数据结构来存储商品信息,每个节点表示一个字符,边表示该字符的下一个字符,并在末尾节点存储该商品名称。
然后,遍历商品名称数组,将每个商品名称逐个字符插入字典树中。
对于每个关键词,我们可以从字典树的根节点开始遍历,如果该字符在当前节点有对应的边,则跳到该边所指向的节点,否则说明该关键词无法匹配任何商品。在遍历过程中,我们可以使用一个字符串记录当前匹配的商品名称。
在末尾节点时,说明匹配成功,将匹配到的商品名称加入结果数组。
代码实现如下:
```java
class TrieNode {
TrieNode[] children;
String itemName;
TrieNode() {
children = new TrieNode[26];
itemName = "";
}
}
class Trie {
TrieNode root;
Trie() {
root = new TrieNode();
}
void insert(String itemName) {
TrieNode cur = root;
for (int i = 0; i < itemName.length(); i++) {
int index = itemName.charAt(i) - 'a';
if (cur.children[index] == null) {
cur.children[index] = new TrieNode();
}
cur = cur.children[index];
}
cur.itemName = itemName;
}
List<String> search(String keyword) {
TrieNode cur = root;
List<String> result = new Array
阅读全文