对于固定子字符串搜索,恰好有两种已知算法具有 O(n) 运行时间和 O(1) 工作空间:SMOA 和 Two-Way(参见http://www-igm.univ-mlv.fr/~lecroq/字符串/ )。它们都依赖于对字母表进行排序或强加排序。
假设我不想搜索固定的子字符串,而是希望能够搜索用括号表达式表示的一组子字符串中的任何一个,例如
[abc]d
将匹配“ad”、“bd”或“cd”。假设字母表是有限的,任何括号的长度都是有界的,因此在时间或空间要求中任何形式为“括号长度”的项都是 O(1)。
有没有办法在 O(n) 时间内执行搜索(n
要搜索的字符串的长度在哪里,即“干草堆”)和 O(1) 工作空间?
除非解决方案涉及以某种方式使用字母顺序对括号集进行排序,否则该问题的任何解决方案都将为 O(n)/O(1) 中的固定子字符串搜索问题提供新的解决方案,而无需排序要求,因此似乎不太可能存在。