字符串相关概念

本文简单讲解字符串的相关概念。如:回文、子串、子序列、前缀树、后缀树、后缀数组、匹配、字典序。

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.字典序

字典序就是指对给定的字符串,按照首字母的字典值排序。如果首字母相同的字符串,则按照第二个字母的字典序排序,依次类推。

发布了49 篇原创文章 · 获赞 77 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章