字典樹的實現
字典樹又稱為字首樹或者trie樹,是處理字串常用的資料結構。假設組成所有單詞的字元僅是『a』~『z』,請實現字典樹的結構,幷包含以下四個主要的功能。void insert(string word):新增word,可重複新增;void delete(string word):刪除word,如果word新增過多次,僅刪除一次;boolean search(string word):查詢word是否在字典樹**現過(完整的出現過,字首式不算);int prefixnumber(string pre):返回以字串pre作為字首的單詞數量。現在給定乙個m,表示有m次操作,每次操作都為以上四種操作之一。每次操作會給定乙個整數op和乙個字串word,op代表乙個操作碼,如果op為1,則代表新增word,op為2則代表刪除word,op為3則代表查詢word是否在字典樹中,op為4代表返回以word為字首的單詞數量(資料保證不會刪除不存在的word)。
輸入描述:
輸入包含多行,第一行乙個整數m(1≤
m≤10
5)
(1\leq m\leq 10^5)
(1≤m≤1
05),代表操作次數。接下來m行,每行包含乙個整數op(1≤
op≤4
)(1 \leq op \leq 4)
(1≤op≤
4)和乙個字串word(1≤
leng
thwo
rd≤20
)(1 \leq length_ \leq 20)
(1≤len
gthw
ord
≤20)
。輸出描述:
對於每次操作,如果op為3時,如果word在字典樹中,請輸出「yes」,否則輸出「no」;如果op為4時,請輸出返回以word為字首的單詞數量,其它情況不輸出。
示例1輸入
7
1 qwer
1 qwe
3 qwer
4 q2 qwer
3 qwer
4 q
輸出yes2no
1
題解:
字典樹的模板題。關於字典樹的定義不做介紹。本題我們需要記錄有多少個單詞共用某個節點,以及多少個單詞以某個節點結尾。我習慣性使用二維陣列表示 trie 樹,就是開闢的空間較大。
**:
#include
using
namespace std;
const
int n =
2000010
;int trie[n][26
];int path[n]
;int num[n]
;int idx;
void
insert
(char
*s )
++num[p];}
bool
search
(char
*s )
return num[p]!=0
;}void
_delete
(char
*s )
p = t;
}--num[p];}
intprefixnumber
(char
*s )
return path[p];}
intmain
(void
)return0;
}
字典樹的實現
最近對字典樹來了興趣,心血來潮,把 敲了 下面是對字典樹的大體解釋 字典樹是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表...
字典樹實現
字典樹,又稱單詞查詢樹,trie 樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊樹高。以下是 實現部分 字典樹clas...
Trie樹(字典樹)的實現
trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...