本文簡單講解字符串的相關概念。如:迴文、子串、子序列、前綴樹、後綴樹、後綴數組、匹配、字典序。
1.迴文
所謂迴文字符串,就是指一個字符串,從左到右讀和從右到左讀是完全一樣的,比如”xyx”。
2.子序列
對於一個序列a=a[1],a[2],……a[n]。則非空序列a2=a[p1],a[p2]……a[pm]爲a的一個子序列,其中1<=p1< p2<…..< pm<=n。
如:“welcome” 子序列:wl、wcome、ecome….
3.子串
串中任意個連續的字符組成的子序列稱爲該串的子串。
如:“welcome” 子串:we、come、welcome…..
子串數量的計算方法:若字符串的長度爲n,則子串的個數就是[n*(n+1)/2]個(不含空子串)
3.Trie樹
Trie樹,又稱字典樹、前綴樹,是一種樹形結構,是哈希樹的變種,是一種用於快速檢索的多叉樹結構。
典型應用是用於統計和排序大量的字符串(但不僅限於字符串)。經常被搜索引擎系統用於文本詞頻統計。它的優點是:最大限度地減少無謂的字符串比較,查詢效率比哈希表高。
Trie樹的核心思想是空間換時間。利用字符串的公共前綴來降低查詢時間的開銷以達到提高效率的目的。
Trie樹的缺點是內存消耗非常大。
4.後綴樹
後綴樹,就是把字符串的所有後綴保存並進行壓縮的字典樹。相對於字典樹來說,後綴樹並不是針對大量字符串的,而是針對一個或幾個字符串來解決問題。如字符串的迴文子串,兩個字符串的最長公共子串等等。
5.後綴數組
後綴數組是處理字符串的有力工具,是後綴樹的一個非常精巧的替代品。它比後綴樹容易編程實現,能夠實現後綴樹的很多功能而時間複雜度也並不遜色。而且,它比後綴樹所佔用的內存空間小很多。
定義:後綴數組SA是一個一維數組,它保存1..n的某個排列SA[1],SA[2],……,SA[n],並且保證Suffix(SA[i])
6.匹配
定義:字符串匹配問題就是在一個大的字符串T中搜索某個字符串P的所有出現位置。其中,T稱爲文本,P稱爲模式。
7.字典序
字典序就是指對給定的字符串,按照首字母的字典值排序。如果首字母相同的字符串,則按照第二個字母的字典序排序,依次類推。