第一字串 Trie Topology

2021-07-04 15:58:45 字數 727 閱讀 7900

bessie最近在玩字串。她發現通過改變字母的順序可以使一些字串排在其他所有的字串之前(按字典序從小到大排序)。

比如說,bessie找到了對於字串」omm」,」moo」,」mom」,和」ommnom」,她可以用標準的字母表把」mom」排在最前面,也可以用字母表」abcdefghijklonmpqrstuvwxyz」把」omm」排在最前面。但是,bessie不能找出乙個方案使」moo」或」ommnom」排在最前面。

請你幫助bessie找出哪些字串可以通過改變字母表來讓它們排在最前面。要計算字串x是否字典序比字串y小,要找到兩個字串最先出現的不同字元的位置,j。如果沒有這樣的位置存在,那麼如果x的長度比y短,則x字典序小於y。否則,如果x[j]在字母表中比y[j]早出現,那麼x字典序小於y。

輸入n與n個串 , n<=30000 , σn

i=1|

si| <=300000

輸出 第1行,求表示能排在字典序最前面的字串總數k。

第2..k+1行,每行包括能排在字典序最前面的字串,輸出順序按照輸入給出的順序。

思路很直觀:我們需要判斷乙個串是否能排第一,那麼必然要確定某些字母的先後順序,這些順序可以用圖來表示,圖中如果存在矛盾則此串非法。

如何構圖? 考慮用trie, 先將所有串插入trie,然後逐一判斷,假設對於子串i,它在trie上走點x,那麼點x的字母必須要比fa[x]的所有兒子代表的字母前,於是我們從x代表的字母向另一些字母連邊。最後跑一次拓撲,若存在環則不合法。

字串(一) 字串Hash

今天開一手最不 tao 擅 yan 長的字串演算法 字串hash演算法。似乎提到字串的話,kmp應該是更為常見的一種,但是hash有它的優點,被犇們稱為 優雅的暴力 何謂hash?hash的中文稱為雜湊,這當然是音譯,直譯過來就是雜湊,或者也有叫預對映的。雜湊的作用就是通過某個特殊函式的對映,將任意...

演算法題(一) 字串

public static string submax string strarr else if max k system.out.println max return arrays.copyofrange strarr,start,end 1 給定兩個字串str1,str2。如果兩者字元種類和相...

dtoj1348 第一字串 first

bessie 最近在玩字串。她發現通過改變字母的順序可以使一些字串排在其他所有的字串之前 按字典序從小到大排序 比如說,bessie 找到了對於字串 omm moo mom 和 ommnom 她可以用標準的字母表把 mom 排在最前面,也可以用字母表 abcdefghijklonmpqrstuvwx...