對于每一個給出的字符串,都在詞典里找到以這個字符串開頭的所有詞;
我是真的不擅長樹特別怕圖論。大概數據結構真的不好。
硬著頭皮編吧。
設計的數據結構是:
self:當前字母;
是否指向a-z:長度為26的數組;分別指向子樹。
子樹的節點個數:初始化為1,每當有路過即+1;
所以L[0]={a,0001000000000...1...0}
C不支持動態數組;所以是定義struct;然后申請100W辣么大的數組?
至于那個100w怎么算出來的。。。
我賭五毛它是覺得一個單詞有10那么長還相互正交,10w個單詞嘛。
100w是需要在函數外宏定義的。
這個題基本也就這樣了。
我先睡一覺起來繼續 太困了。
正好algorithmfans講到Trie樹
真的做的時候沒有想的那么復雜。
talk is cheap。
void build(char *s)
{
int i=0,p=0;//現在位于p點
while(s[i])
{
int x=s[i]-'a';
if(!T[p].next[x])//如果不存在,新建
{
T[le].init();
T[p].next[x]=le++;//p+x的節點指向le
}
p=T[p].next[x];
T[p].cnt++;
i++;
}
}
void query(char *s)
{
int i=0,p=0;//現在位于p點
while(s[i])
{
int x=s[i]-'a';
if(!T[p].next[x])
{
puts("0");
return ;
}
p=T[p].next[x];
i++;
}
cout<<T[p].cnt<<endl;
}