chenchen題解 Trie字串統計

2021-10-08 09:52:08 字數 1193 閱讀 6026

維護乙個字串集合,支援兩種操作:

1.「i x」向集合中插入乙個字串x;

「q x」詢問乙個字串在集合**現了多少次。

共有n個操作,輸入的字串總長度不超過 10^5 ,字串僅包含小寫英文本母。

輸入格式

第一行包含整數n,表示運算元。

接下來n行,每行包含乙個操作指令,指令為「i xix」或「q xqx」中的一種。

資料範圍:

1

<

n<2∗

1041

1<

n<2∗

104

輸出格式

對於每個詢問指令「q x,都要輸出乙個整數作為結果,表示x在集合**現的次數。

每個結果佔一行。

sample input

5i abc

q abc

q ab

i ab

q ab

sample output 110

11、插入過程 (i操作)

對於乙個單詞,從根開始,沿著單詞的各個字母所對應的樹中的節點分支向下走,直到單詞遍歷完,將最後的節點標記一下,表示該單詞已插入trie樹。

2、查詢過程 (q操作)

同樣的,從根開始按照單詞的字母順序向下遍歷trie樹,一旦發現某個節點沒有標記或者單詞遍歷完成而最後的節點未標,則表示該單詞不存在。若最後的節點標記了,表示該單詞存在。

o (m

n∗lo

gn

)o(mn*logn)

o(mn∗l

ogn)

#include

using

namespace std;

const

int n=

1000010

;int son[n][30

],cnt[n]

;int n;

int idx;

char s[n]

;voidin(

char s)

cnt[p]++;

}intqu(

char s)

return cnt[p];}

intmain

(int argc,

char

** ar**)

else

}return0;

}

chenchen題解 最短編輯距離

blablablablablablablablablabla 傳送門 刪除 將字串a中的某個字元刪除,操作次數f i 1 j 1插入 在字串a的某個位置插入某個字元,操作次數f i j 1 1替換 將字串a中的某個字元替換為另乙個字元,需要分兩種情況討論 i.a i b j 操作次數f i 1 j ...

chenchen題解 最短編輯距離

blablablablablablablablablabla 傳送門 狀態表示 dp i j 表示將字串a中前i個字元編輯成字串b中前j個字元所要進行的最少操作 狀態計算,根據操作將集合劃分為3類 刪除 將字串a中的某個字元刪除,操作次數dp i 1 j 1插入 在字串a的某個位置插入某個字元,操作...

chenchen題解 最長不下降子串行

blablablablablablablablablabla 傳送門 dp題狀態表示 dp i 表示到i個字元的最長不下降子串行的長度 狀態轉移 每當當前的子串行為上公升且長度大於maxx時,就更新maxx o n 2 o n 2 o n2 include using namespace std c...