ACwing(基礎) --- Trie樹
阿新 • • 發佈:2020-08-23
什麼是Trie樹
trie,又稱字首樹或字典樹,是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。 與二叉查詢樹不同,鍵不是直接儲存在節點中,而是由節點在樹中的位置決定。 一個節點的所有子孫都有相同的字首,也就是這個節點對應的字串,而根節點對應空字串。
Trie字串統計
#include<iostream> using namespace std; const int N = 1e5+10; int son[N][26] , cnt[N],idx;//下標是0的點,既是根節點,又是空節點 char str[N]; void insert(char str[]){ int p = 0; for(int i = 0; str[i]; i ++){ int u = str[i] - 'a'; if(!son[p][u]) son[p][u] = ++ idx; p = son[p][u]; } cnt[p] ++ ; } int query(char str[]){ int p = 0; for(int i = 0; str[i]; i ++ ){ int u = str[i]; if(!son[p][u]) return 0; p = son[p][u]; } return cnt[p]; } int main(){ int n; cin>>n; while(n -- ){ char op[2]; cin>>op>>str; if(op[0] == 'I') insert(str); else printf("%d\n",query(str)); } return 0; }