示例#1
0
        public void AddChild(string label, SuffixTreeNode node)
        {
            Guard.IsNotNullOrEmpty(label);
            SuffixTreeEdge edge = new SuffixTreeEdge(label, this, node);

            KeyToEdgeMap.Add(label, edge);
            SymbolToEdgeMap.Add(label[0], edge);
        }
示例#2
0
        public SuffixTreeNode Resolve(string @string)
        {
            int            index = -1;
            SuffixTreeNode node  = root;
            SuffixTreeEdge edge  = null;

            for (int n = 0; n < @string.Length; n++)
            {
                char symbol = @string[n];
                if (index == -1)
                {
                    edge = node.GetEdge(symbol);
                    if (edge == null)
                    {
                        return(null);
                    }
                    node = edge.EndNode;
                    if (edge.Label.Length > 1)
                    {
                        index = 1;
                    }
                }
                else
                {
                    if (symbol != edge.Label[index])
                    {
                        return(null);
                    }
                    if (++index == edge.Label.Length)
                    {
                        index = -1;
                    }
                }
            }
            return(node);
        }