這棵字典樹就保存着
從根節點到某特定節點的路徑就是對應的字符串。如上圖節點編號爲紅色的點就說明:從根節點到該節點的路徑爲一個保存了的字符串。
具體實現用
字母一般用編號
然後用一個val數組保存以該點爲結尾的字符串的個數,如上圖:
有時候可能會有多個相同字符串,所以
建
void buildtrie(int x)
{
int u=0,m=strlen(str[x]);
for(int i=0;i<m;i++)
{
int v=T(str[x][i]);
if(trie[u][v]==0) //開新節點
{
trie[u][v]=++se;
val[se]=0;
memset(trie[se],0,sizeof(trie[se]));
}
u=trie[u][v]; //接着往下走
}
val[u]++;
}
int main()
{
scanf("%d",n);
for(int i=0;i<n;i++)
{
scanf("%s",str[i]);
buildtrie(i);
}
return 0;
}
例題:UVALive3942(題解)