Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字符串爲前綴的單詞數量(單詞本身也是自己的前綴).
Input
輸入數據的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的單詞,一個空行代表單詞表的結束.第二部分是一連串的提問,每行一個提問,每個提問都是一個字符串.
注意:本題只有一組測試數據,處理到文件結束.
Output
對於每個提問,給出以該字符串爲前綴的單詞的數量.
Sample Input
banana
band
bee
absolute
acm
ba
b
band
abc
Sample Output
2
3
1
0
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int son[N][26],tail[N],cnt=0;
string s;
void Insert()
{
int now=0;
for(int i=0;i<s.size();i++)
{
int x=s[i]-'a';
if(son[now][x]==0)
son[now][x]=++cnt;
tail[son[now][x]]++;
now=son[now][x];
}
}
int query()
{
int now=0;
for(int i=0;i<s.size();i++)
{
int x=s[i]-'a';
now=son[now][x];
if(now==0)
return 0;
}
return tail[now];
}
int main()
{
while(getline(cin,s),s.size())
{
Insert();
}
while(cin >> s)
{
cout << query() << endl;
}
return 0;
}