學習之旅 字典樹

2021-08-24 23:41:10 字數 979 閱讀 8900

對於字串s1和s2,當s1的前|s2|個字元和s2相同時,那麼s2是s1的字首(|s2|表示字串s2的長度)。現在小zc有n個串,我們定義正確的字首s:在這n個串中有不超過5個串以s為字首。我們定義最短正確字首s:s是乙個正確字首,並且s的所有字首(不包括s)都不是正確字首。現在小zc想要知道在這n個串中最短正確字首的數量。

第一行乙個正整數t(t<=10),代表t組測試用例。

對於每組測試用例,第一行乙個正整數n(n<=10000),代表字串的數量。

之後n行每行包含乙個字串,每個字串只包含小寫字母'a'-'z'。

所有字串的總長度不超過2000000。

輸入可能包含相同的字串,你可以認為它們是不同的。

輸出最短正確字首的數量

22ab

ab6aab

abcabcd

abcde

abcdef

1

1

對於第乙個樣例,"a"是最短正確字首

對於第二個樣例,"ab"是最短正確字首

空字串""不應當被當作是最短正確字首

題解:字典樹+dfs

#includeusing namespace std;

const int maxn=1000010;

int ans;

char s[maxn];

struct node

}*root;

void insert(char*s)

now=now->nxt[to];

}now->num++;

now->flag=1;

}void dfs(node*cur)

for(int i=0;i<26;i++)

}int main()

return 0;

}

字典樹學習

字典樹差不多長這樣 核心就是利用了公共字首儲存出現過的單詞。例如,這棵樹的左半部分就記錄了三個單詞 ogday ogdfra ogdftq 他們有共同的字首ogd include include include include include include include include incl...

字典樹學習總結

解決問題 主要應對多次查詢,典例就是字典,字典樹就是一本字典,字典的最大好處就是能快速查詢 主要原理 我們在查某乙個單詞時總會先索引第乙個字母,然後在查第二個字母,以此類推直到查到此單詞為止,那麼字典樹的查詢過程也是如此,先查第乙個字母的節點位置,然後在該節點的子節點之中查詢第二個字母的位置,以此類...

字典樹學習總結

字串的多模匹配,kmp,字典樹,ac自動機,現在學習字典樹 字典樹又稱為單詞查詢樹,用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻的統計。優點是利用字串的公共字首來減少查詢時間,最大限度減少無畏字串比較,查詢效率比雜湊樹高。其實字典樹就是dfa!每層是乙個狀態,只...