1、可重疊的最長連續子串
題意:給乙個字串,問重複出現的連續的子串中最長的,重複的子串可以有重疊的部分,若結果不止乙個則輸出字典序最小的
例:對於字串"abcabcabc",結果為"abcabc";對於字串"abcdggabc",結果為"abc"
解法:找到height陣列中最大的,假設height[i]是最大的,其值為s,則字尾sa[i]的前s個字元就是結果
2、不可重疊的最長連續子串
題目:poj1743
題意:給乙個字串,問重複出現的連續的子串中最長的,重複的連續子串不能有重疊的部分,若結果不止乙個則輸出字典序最小的
例:對於字串"abcabcabc",結果為"abc";對於字串"abcdggabc",結果為"abc"
3、可重疊且至少出現k次的最長連續子串
題目:poj3261
題意:給乙個字串,問重複出現至少k次的連續的子串中最長的,重複的子串可重疊,若結果不止乙個則輸出字典序最小的
例:對於字串"abcabcabcabc",若k=3,結果為"abcabc";對於字串"abcdgggabc",k=3,結果為"g"
4、連續子串個數
題目:spoj-disubstr
spoj-subst1
題意:給乙個字串、求出字串中不同的連續子串的個數
例:對於字串"abc",結果為3+2+1=6;對於字串"abcc",結果為:3+3+2+1=9
解法:其實結果就是所有子串的個數減去height陣列之和,至於為什麼這樣做是正確的呢?顯而易見,最終結果=所有子串的個數-重複的子串個數,考慮每個位置i對重複子串的貢獻度,對於以位置i開始的字串,這些字串的有多少是重複的呢?其實就是字尾i與其他字尾的最長公共字首長度,也就是height[ rank[i] ],所以所有的重複的子串就是每個位置的對於重複子串的貢獻度之和,也就是height陣列之和
字尾陣列的應用
本文參考了 字尾陣列 處理字串的有力工具 子串 字串s 的子串r i.j i j,表示r 串中從i 到j 這一段,也就是順次排列r i r i 1 r j 形成的字串。字尾 字尾是指從某個位置i 開始到整個串末尾結束的乙個特殊子串。字串r 的從第i 個字元開始的字尾表示為suffix i 也就是 s...
字尾陣列的應用
1.求乙個字串所有不同的子串個數 子串意味著是連續的 比如 abaaba 它的字串包括 a,b,aa,ab,ba,aba,baa,aab,abaa,baab,aaba,abaab,baaba,abaaba。這個就可以用字尾陣列的結果求解。首先,我們知道sa陣列,裡面是排好序的所有字尾,運用字尾的想法...
字尾陣列學習與應用
sa i 即,排名為i的字尾的起點下標 rank i 即,第i個字尾的排名 height i 即,sa i 和sa i 1 的最長公共字首 h i 即,height rank i 即第i個字尾與前一名的最長公共字首 結論一 定義 lcp i,j lc p su ffix sa i s uffi x ...