zoukankan      html  css  js  c++  java
  • [LC] 1268. Search Suggestions System

    Given an array of strings products and a string searchWord. We want to 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 the searchWord. If there are more than three products with a common prefix return the three lexicographically minimums products.

    Return 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"]]
    

    Example 4:

    Input: products = ["havana"], searchWord = "tatiana"
    Output: [[],[],[],[],[],[],[]]
    

    Constraints:

    • 1 <= products.length <= 1000
    • There are no repeated elements in products.
    • 1 <= Σ products[i].length <= 2 * 10^4
    • All characters of products[i] are lower-case English letters.
    • 1 <= searchWord.length <= 1000
    • All characters of searchWord are lower-case English letters.
    class Trie {
        Trie[] children = new Trie[26];
        List<String> suggesions = new ArrayList<>();
    }
    
    class Solution {
        public List<List<String>> suggestedProducts(String[] products, String searchWord) {
            Arrays.sort(products);
            Trie root = new Trie();
            // build tree
            for (String product : products) {
                Trie curTrie = root;
                char[] curArr = product.toCharArray();
                for (char c : curArr) {
                    if (curTrie.children[c - 'a'] == null) {
                        curTrie.children[c - 'a'] = new Trie();                
                    }
                    curTrie = curTrie.children[c - 'a'];
                    if (curTrie.suggesions.size() < 3) {
                        curTrie.suggesions.add(product);                
                    }
                }
            }
            
            List<List<String>> res = new ArrayList<>();
            char[] charArr = searchWord.toCharArray();
            for (char c : charArr) {
                if (root != null) {
                    root = root.children[c - 'a'];
                }
                res.add(root == null ? new ArrayList<>() : root.suggesions);
            }
            return res;
        }
    }
  • 相关阅读:
    在CentOS 6.7 64位安装PHP的PDO_OCI扩展 Installing PDO_OCI extension on CentOS 6.7 64bit
    Windows下Apache+PHP+MySQL开发环境的搭建(WAMP)
    在Window上用cmd创建.htaccess文件
    Magento 0元订单 支付方式 -- Magento 0 Subtotal Payment Method
    PHP使用OPENSSL RSA加密解密数据
    CentOS编译安装PHP 7.0
    [转] CentOS单独安装Apache Benchmark压力测试工具的办法
    [转] 基于MySQL的秒杀核心设计(减库存部分)-防超卖与高并发
    快速激活JetBrains PhpStorm WebStorm系列产品
    Mac OS的phpize空信息解决办法
  • 原文地址:https://www.cnblogs.com/xuanlu/p/12635170.html
Copyright © 2011-2022 走看看