搜索数组中字符串的所有出现次数

时间:2016-12-09 04:54:41

标签: c++ algorithm string-matching

假设我的字符串数组 A n ,而 A 按字典顺序排序,例如:

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

如果字符串 S 的大小 m ,我怎样才能找到第一个索引 i 和最后一个索引 j A ,以便:

  • S A [i] 的前缀,没有 k<我 S 作为 A [k]

  • 的前缀
  • S A [j] 的前缀,没有 k>我 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

1 个答案:

答案 0 :(得分:-1)

在对数组进行排序时,您可以使用std::lower_bound来查找序列的开头(这是您的lg(n)),然后线性搜索以查找序列的结尾(& #39;是你的m)。