public class TireMap
{
public class TireNode
{
private bool m_isEnd = false;
public bool IsEnd
{
get { return m_isEnd; }
set { m_isEnd = value; }
}
public Dictionary<char, TireNode> NextNodes = new Dictionary<char, TireNode>();
}
private TireNode m_HeadNode = null;
public TireMap()
{
m_HeadNode = new TireNode();
m_HeadNode.IsEnd = false;
}
public void AddWord(string word)
{
int idx = 0;
TireNode curNode = m_HeadNode;
while (idx < word.Length)
{
char key = word.ElementAt(idx);
if (!curNode.NextNodes.ContainsKey(key))
{
curNode.NextNodes.Add(key, new TireNode());
}
curNode.NextNodes.TryGetValue(key, out curNode);
idx++;
}
if (curNode != m_HeadNode)
{
curNode.IsEnd = true;
}
}
public bool HasWord(string word)
{
int idx = 0;
TireNode curNode = m_HeadNode;
while (idx < word.Length)
{
char key = word.ElementAt(idx);
if (!curNode.NextNodes.ContainsKey(key))
{
curNode = null;
break;
}
curNode.NextNodes.TryGetValue(key, out curNode);
idx++;
}
return curNode != m_HeadNode && curNode != null && curNode.IsEnd;
}
/// <summary>
/// 没有释放空间版的RemoveWord
/// </summary>
public void RemoveWord(string word)
{
int idx = 0;
TireNode curNode = m_HeadNode;
while (idx < word.Length)
{
char key = word.ElementAt(idx);
if (!curNode.NextNodes.ContainsKey(key))
{
curNode = null;
break;
}
curNode.NextNodes.TryGetValue(key, out curNode);
idx++;
}
if ( curNode != m_HeadNode && curNode != null && curNode.IsEnd )
{
curNode.IsEnd = false;
}
}
}