支持追加,前置和搜索操作的字符串数据结构

时间:2013-04-09 07:18:22

标签: string algorithm data-structures pattern-matching string-search

我需要构建一个文本编辑器作为我的迷你项目,我需要设计一个支持以下操作的数据结构或算法:

  • 追加:在字符串的末尾附加一个字符。
  • Prepend :在字符串的开头添加一个字符。
  • 搜索:给定搜索字符串s,找到字符串的所有匹配项。

每次操作在O(log n)时间或更短时间内。搜索和替换操作将是可观的,但不是必需的。字符串的最大长度是常量。任何想法如何实现这一目标?

谢谢!

2 个答案:

答案 0 :(得分:2)

这种应用程序的通用数据结构是Rope,其中Append和Prepend是O(1),尽管这取决于树是否平衡。但是,如Толя所述,搜索将是线性的。

肯定有数据结构可以使搜索更快,例如Suffix Tree,但它们可能不适合文本编辑器应用程序。

答案 1 :(得分:0)

我建议你改编Trie。在追加操作中,添加以新字符结尾的字符串的所有后缀,其长度最多为数据结构中字符串的最大长度。在prepend中添加从新char开始的字符串的所有前缀,其长度最多为字符串的固定长度。渐近两个操作都是常量 - 它们取O(k^2),其中k是字符串的固定长度。对于结构中的每个节点,跟踪在该节点处结束的所有字符串(可能是列表)。

搜索操作将再次保持不变:迭代字符串并输出存储在结束节点中的所有索引(如果您还没有“退出树”)。

我的方法的一个缺点是内存开销(大多数时候是单词的最大长度),但是如果允许的最大字符串长度是合理的并且你只插入真正的单词(例如来自英语字典),这不应该是一个大问题。