問題1:給你乙個單詞集合,支援新增,刪除,詢問某個單詞出現次數。
const maxword=100; maxn=100
;type
dictree=^rec;
rec=record
next:array[
1..maxword]of dictree;
val:boolean;
cnt:longint;
end;
var a:array[1
..maxn]of rec;
root:dictree;
i,n:longint;
s:string
; ch:
char
;procedure delete(s:
string
);var
p,newnode:dictree;
x,i,j:longint;
begin
p:=root;
for i:=1 to length(s) do
begin
x:=ord(s[i]);
if (p^.next[ord(s[i])]=nil) then exit
else p:=p^.next[x];
end;
p^.cnt:=0
; p^.val:=false
;end;
procedure insert(s:
string
);
varp,newnode:dictree;
x,i,j:integer;
begin
p:=root;
for i:=1 to length(s) do
begin
x:=ord(s[i]);
if p^.next[ord(s[i])]=nil then begin
new(newnode);
for j:=1 to maxn do newnode^.next[j]:=nil;
p^.next[x]:=newnode;
p:=newnode;
end
else p:=p^.next[x];
end;
inc(p^.cnt);
end;
function find(s:
string
):longint;
varp:dictree;
i,x:longint;
begin
p:=root;
for i:=1 to length(s) do
begin
x:=ord(s[i]);
if p^.next[ord(s[i])]=nil then exit(0
)
else p:=p^.next[x];
end;
exit(p^.cnt);
end;
begin
new(root);
root^.cnt:=0
; fillchar(root^.cnt,sizeof(root^.cnt),0
); writeln(
'// a:add.');
writeln(
'// d:delete.');
writeln(
'// q:query.');
readln(n);
for i:=1 to n do
begin
readln(ch);
readln(s);
case
ch of
'a':insert(s);
'd':delete(s);
'q':writeln(find(s));
end;
end;
end.
問題2:給你乙個單詞集合,支援新增,刪除,詢問以某個字串為字首的單詞個數
Trie樹(字典樹)的實現
trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...
trie樹 字典樹 介紹及簡單實現
第一次接觸trie樹,翻了一些演算法樹竟然沒有找到。於是在google上各種查詢,現在對自己所了解的trie總結一下,以便將來複習,並給出簡單的實現。trie,又稱字典樹 單詞查詢樹,是一種樹形結構,用於儲存大量的字串。它的優點是 利用字串的公共字首來節約儲存空間。相對來說,trie樹是一種比較簡單...
trie樹 字典樹 java實現
public class trie public void insert string word else current.count current.isend true 怎麼判斷單詞是否存在?被判斷的單詞的字母與根節點下的子節點的字母進行比較,直到匹配到兩者最後乙個字母相同,並且最後乙個節點的i...