• 1032. Stream of Characters


    Implement the StreamChecker class as follows:

    • StreamChecker(words): Constructor, init the data structure with the given words.
    • query(letter): returns true if and only if for some k >= 1, the last k characters queried (in order from oldest to newest, including this letter just queried) spell one of the words in the given list.

    Example:

    StreamChecker streamChecker = new StreamChecker(["cd","f","kl"]); // init the dictionary.
    streamChecker.query('a');          // return false
    streamChecker.query('b');          // return false
    streamChecker.query('c');          // return false
    streamChecker.query('d');          // return true, because 'cd' is in the wordlist
    streamChecker.query('e');          // return false
    streamChecker.query('f');          // return true, because 'f' is in the wordlist
    streamChecker.query('g');          // return false
    streamChecker.query('h');          // return false
    streamChecker.query('i');          // return false
    streamChecker.query('j');          // return false
    streamChecker.query('k');          // return false
    streamChecker.query('l');          // return true, because 'kl' is in the wordlist
    

    Note:

    • 1 <= words.length <= 2000
    • 1 <= words[i].length <= 2000
    • Words will only consist of lowercase English letters.
    • Queries will only consist of lowercase English letters.
    • The number of queries is at most 40000.

    Store the words in the trie with reverse order, and check the query string from the end

    class StreamChecker {
        class TrieNode {
            TrieNode[] children = new TrieNode[26];
            boolean isWord;
        }
    
        TrieNode root;
        StringBuilder sb;
    
        public StreamChecker(String[] words) {
            root = new TrieNode();
            sb = new StringBuilder();
            buildTrie(words);
        }
    
        private void buildTrie(String[] words) {
            for(String w : words) {
                TrieNode cur = root;
                for(int i = w.length() - 1; i >= 0; i--) {
                    if(cur.children[w.charAt(i) - 'a'] == null) {
                        cur.children[w.charAt(i) - 'a'] = new TrieNode();
                    }
                    cur = cur.children[w.charAt(i) - 'a'];
                }
                cur.isWord = true;
            }
        }
    
        public boolean query(char letter) {
            sb.append(letter);
            TrieNode cur = root;
            for(int i = sb.length() - 1; i >= 0 && cur != null; i--) {
                cur = cur.children[sb.charAt(i) - 'a'];
                if(cur != null && cur.isWord) {
                    return true;
                }
            }
            return false;
        }
    }
    
    /**
     * Your StreamChecker object will be instantiated and called as such:
     * StreamChecker obj = new StreamChecker(words);
     * boolean param_1 = obj.query(letter);
     */
  • 相关阅读:
    zbb20181207 springboot @ConfigurationProperties使用
    zbb20181206 logback,lombok 默认日志logback配置解析
    Spring Boot (8) 全局异常处理
    Spring Boot (7) JdbcTemplate访问数据库
    Spring Boot (6) Spring Data JPA
    Spring Boot (4) 静态页面和Thymeleaf模板
    Spring Boot (3) 热部署devtools
    Spring Boot (2) Restful风格接口
    Spring Boot (1) 构建第一个Spring Boot工程
    idea使用maven搭建ssm框架实现登陆商品增删改查
  • 原文地址:https://www.cnblogs.com/fatttcat/p/13601298.html
Copyright © 2020-2023  润新知