在数组中搜索字符串的所有术

Search all ocurrences of string in array

本文关键字:字符串 数组 搜索      更新时间:2023-10-16

,假设我有一个字符串数组 a 的大小 n ,而 a 例如:,例如:

0: abcaoeir
1: acda
2: acdttt
3: acdy
4: degaeiour
5: utsss

给定一个字符串 s 的大小 m ,我如何找到第一个索引 i 和最后一个索引 J a 的strong>:

  • s a [i] 的前缀,no k<i 将有 s 作为 a [k]

  • 的前缀
  • S a [J] 的前缀,no k> 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

我如何找到这样的 i j in o(m lg(n)) time?

在排序阵列时,您可以使用 std::lower_bound查找序列的开始(这是您的lg(n)),然后线性地向前搜索以查找序列的末尾(那就是您的M)。