zoukankan      html  css  js  c++  java
  • 745. Prefix and Suffix Search

    package LeetCode_745
    
    /**
     * 745. Prefix and Suffix Search
     * https://leetcode.com/problems/prefix-and-suffix-search/description/
     *
    Given many words, words[i] has weight i.
    Design a class WordFilter that supports one function, WordFilter.f(String prefix, String suffix).
    It will return the word with given prefix and suffix with maximum weight. If no word exists, return -1.
    
    Examples:
    Input:
    WordFilter(["apple"])
    WordFilter.f("a", "e") // returns 0
    WordFilter.f("b", "") // returns -1
    
    Note:
    words has length in range [1, 15000].
    For each test case, up to words.length queries WordFilter.f may be made.
    words[i] has length in range [1, 10].
    prefix, suffix have lengths in range [0, 10].
    words[i] and prefix, suffix queries consist of lowercase letters only.
     * */
    
    /*
    * solution 1: HashMap, Time complexity:O(n*len^3 + n*len), Space complexity:O(n*len^3)
    * n is number of words, len is the max length of word
    * */
    class WordFilter(words: Array<String>) {
        //key is string form: perfix_suffix, value is Index
        val map = HashMap<String, Int>()
    
        init {
            buildMap(words)
        }
    
        /*
        * build map by word,
        * for example: apple can generate the key: a_e, ap_le, app_ple, appl_pple, apple_apple
        * */
        private fun buildMap(words: Array<String>) {
            var index = 0
            for (word in words) {
                val len = word.length
                val perfixs = Array<String>(len + 1, { "" })
                val suffixs = Array<String>(len + 1, { "" })
                for (i in 0 until len) {
                    perfixs[i + 1] = perfixs[i] + word[i]
                    suffixs[i + 1] = word[len - i - 1] + suffixs[i]
                }
                //put perfixs and suffixs input map
                for (perfix in perfixs) {
                    for (suffix in suffixs) {
                        //HashMap can replace and value if the same key
                        map.put(perfix + "_" + suffix, index)
                    }
                }
                index++
            }
        }
    
        fun f(prefix: String, suffix: String): Int {
            val key = prefix + "_" + suffix
            if (map.containsKey(key)) {
                return map.get(key)!!
            }
            return -1
        }
    }
    
    /**
     * Your WordFilter object will be instantiated and called as such:
     * var obj = WordFilter(words)
     * var param_1 = obj.f(prefix,suffix)
     */
  • 相关阅读:
    Linuxday4——文件管理
    LinuxDay9——文件查找和压缩
    LinuxDay1——计算机基础
    LinuxDay2——Linux历史
    LinuxDay5——标准I/O和管道
    加入园子一周年
    终于把Blog地址改为Random.cnblogs.com了
    写了个文件上传操作的类
    [照片]尖山行
    C#命名约定[转]
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13404108.html
Copyright © 2011-2022 走看看