Exemplo n.º 1
0
        public void Add(string word)
        {
            LRUPrefixTreeNode current = _root;

            foreach (var c in word.ToLower())
            {
                if (!current.ContainsKey(c))
                {
                    current.Add(c, new LRUPrefixTreeNode(current, c));
                }

                current = current[c];
            }

            current.IsWord = true;

            AddToMap(current);
        }
Exemplo n.º 2
0
        public bool IsWord(string word)
        {
            LRUPrefixTreeNode current = _root;

            foreach (var c in word.ToLower())
            {
                if (!current.ContainsKey(c))
                {
                    return(false);
                }

                current = current[c];
            }

            if (current.IsWord)
            {
                MoveToFront(_map[current]);
            }

            return(current.IsWord);
        }
Exemplo n.º 3
0
        public IEnumerable <string> Predict(string word)
        {
            List <string> words = new List <string>();

            LRUPrefixTreeNode current = _root;

            foreach (var c in word.ToLower())
            {
                if (!current.ContainsKey(c))
                {
                    return(words);
                }

                current = current[c];
            }

            ExpandWordsFromNode(current, word.ToLower());

            return(words);

            void ExpandWordsFromNode(LRUPrefixTreeNode node, string prefix)
            {
                if (node.IsWord)
                {
                    words.Add(prefix);
                    MoveToFront(_map[node]);
                }

                if (node.Count == 0)
                {
                    return;
                }

                foreach (var subC in node.Keys)
                {
                    ExpandWordsFromNode(node[subC], prefix + subC);
                }
            }
        }