【发布时间】:2017-04-24 12:22:29
【问题描述】:
假设我有一个大小为 n 的字符串数组 A,并且 A 是按字典顺序排序的,对于示例:
0: abcaoeir
1: acda
2: acdttt
3: acdy
4: degaeiour
5: utsss
给定一个大小为 m 的字符串 S,如何找到第一个索引 i 和最后一个索引 j 的 A 使得:
S 是 A[ i ] 的前缀,没有 k 会有 S作为 A[ k ]
的前缀
S 是 A[ j ] 的前缀,没有 k > i 会有 S作为 A[ k ]
的前缀
即i是第一个索引,S是前缀,j是最后一个。
例如,给定 A 和 S = "acd" :
0: abcaoeir
1: acda [this will be the i]
2: acdttt
3: acdy [this will be the j]
4: degaeiour
5: utsss
我怎样才能在 O(m + lg(n)) 时间内找到这样的 i 和 j?
【问题讨论】:
-
我只看到反对票,但反对票的人没有说什么......
-
它是LCP Array的一个案例。
-
如何使用 LCP 阵列?它只给了我前缀的大小
-
您可以在 LCP-LR 中使用 LCP 阵列:LCP array usage in finding the number of occurrences of a pattern
标签: c++ algorithm string-matching