Md Jawad Noor Asif
Design a special dictionary with some words that searchs the words in it by a prefix and a suffix.
Implement the WordFilter
class:
WordFilter(string[] words)
Initializes the object with the words
in the dictionary.f(string prefix, string suffix)
Returns the index of the word in the dictionary, which has the prefix prefix
and the suffix suffix
. If there is more than one valid index, return the largest of them. If there is no such word in the dictionary, return -1
.
Example 1:
Input
["WordFilter", "f"]
[[["apple"]], ["a", "e"]]
Output
[null, 0]
Explanation
WordFilter wordFilter = new WordFilter(["apple"]);
wordFilter.f("a", "e"); // return 0, because the word at index 0 has prefix = "a" and suffix = 'e".
Constraints:
1 <= words.length <= 15000
1 <= words[i].length <= 10
1 <= prefix.length, suffix.length <= 10
words[i]
, prefix
and suffix
consist of lower-case English letters only.15000
calls will be made to the function f
.def Trie(): return collections.defaultdict(Trie)
WEIGHT = False
class WordFilter(object):
def __init__(self, words):
self.trie = Trie()
for weight, word in enumerate(words):
word += '#'
for i in xrange(len(word)):
cur = self.trie
cur[WEIGHT] = weight
for j in xrange(i, 2 * len(word) - 1):
cur = cur[word[j % len(word)]]
cur[WEIGHT] = weight
def f(self, prefix, suffix):
cur = self.trie
for letter in suffix + '#' + prefix:
if letter not in cur:
return -1
cur = cur[letter]
return cur[WEIGHT]
A humble student of knowledge