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