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

String 支持追加、前置和搜索操作的字符串数据结构,string,algorithm,data-structures,pattern-matching,string-search,String,Algorithm,Data Structures,Pattern Matching,String Search,我需要构建一个文本编辑器作为我的小项目,我需要设计一个支持以下操作的数据结构或算法: 追加:在字符串末尾追加一个字符 前置:在字符串开始处前置字符 搜索:给定搜索字符串s,查找该字符串的所有匹配项 每次操作的时间不超过O(logn)。搜索和替换操作将是可观的,但不是必要的。字符串的最大长度是常量。有什么办法可以做到这一点吗 谢谢 我建议你改编一部电影。在追加操作中,添加以新字符结尾的字符串的所有后缀,长度不超过数据结构中字符串的最大长度。在前置添加字符串的所有前缀,从新字符开始,长度不超过字

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

  • 追加:在字符串末尾追加一个字符
  • 前置:在字符串开始处前置字符

  • 搜索:给定搜索字符串s,查找该字符串的所有匹配项
每次操作的时间不超过O(logn)。搜索和替换操作将是可观的,但不是必要的。字符串的最大长度是常量。有什么办法可以做到这一点吗


谢谢

我建议你改编一部电影。在追加操作中,添加以新字符结尾的字符串的所有后缀,长度不超过数据结构中字符串的最大长度。在前置添加字符串的所有前缀,从新字符开始,长度不超过字符串的固定长度。渐近地,这两个操作都是常数-它们取
O(k^2)
,其中k是字符串的固定长度。对于结构中的每个节点,跟踪以该节点结尾的所有字符串(可能是一个列表)

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


我的方法的一个缺点是内存开销(大多数情况下是一个单词的最大长度),但是如果允许的最大字符串长度是合理的,并且您只插入真实的单词(例如从英语词典中),这应该不是一个大问题。

这种应用程序的常见数据结构是,其中Append和Prepend是O(1),尽管这取决于树是否平衡。然而,正如托卡耶夫所指出的,搜索将是线性的


当然,有一些数据结构可以加快搜索速度,例如a,但它们可能不适合文本编辑器应用程序。

“搜索:给定搜索字符串s,查找该字符串的所有匹配项。”这是O(log n)无法完成的,因为可能需要O(n)作为输出。或者您需要近似O(对数n)?您是否有任何其他限制,或者在任何情况下都必须是O(logn)?O(w*logn+k),w=字长,k=单词出现次数,就可以了。+1非常有趣的数据结构。唯一的问题是它似乎不支持搜索