2、子串(连续)
字符串的一个连续的局部
3、子序列(不连续)
一个字符串的子序列是指在原字符串上去除某些字符但不破坏余下元素的相对位置(在前或在后)而形成的新字符串。4、前缀树(Trie树,字典树)
比如对串: "abcdefg" 而言,"ab","abd","bdef" 等都是它的子序列。特别地,一个串本身,以及空串也是它的子序列。
Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。
优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
Trie有3个基本性质:
(1)根节点不包含字符,除根节点外每一个节点都只包含一个字符。
(2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
(3)每个节点的所有子节点包含的字符都不相同。
5、后缀树和后缀数组
(1)后缀树
后缀树有点类似于Trie树,区别在于Trie树中的每个边只含有一个字符,而后缀树则是每个边包含若干字符。
如下图所示(来自维基百科)
(2)后缀数组
后缀数组 SA 是一个一维数组,它保存 1..n 的某个排列 SA[1 ] ,SA[2] , …… , SA[n] ,并且保证suffix(SA[i]) < Suffix(SA[i+1]) , 1 ≤ i<n 。也就是将 S 的 n 个后缀从小到大进行排序之后把排好序的后缀的开头位置顺次放入 SA 中。
可参考链接:http://www.cnblogs.com/jinkun113/p/4743694.html
给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题。
(如:KMP算法,朴素匹配算法(暴力匹配))
可参考链接:http://www.cnblogs.com/yjiyjige/p/3263858.html
7、字典序
可参考链接:http://www.cnblogs.com/darklights/p/5285598.html
本文介绍了字符串的几个关键概念:子串(连续的字符串局部)、子序列(不局限于连续)、Trie树(一种高效的数据结构,常用于文本词频统计)以及后缀树和后缀数组。Trie树的优点在于减少不必要的字符串比较,提高查询效率。后缀数组则是将字符串的后缀按字典序排序的数组。同时提到了字符串匹配算法,如KMP和朴素匹配。
5200

被折叠的 条评论
为什么被折叠?



