Блог пользователя jigsaw7

Автор jigsaw7, история, 5 лет назад, По-английски

Given 2 strings S1 and S2 consisting of English letters.
For each index i in S1, it is required to find the largest index j >= i such that S1[i..j] is a substring of S2.

For example,
S1 = "acdsuaf"
S2 = "cadsua"
ans = [1, 2, 6, 6, 6, 6, -1].

How to approach this problem in linear time?

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Is there a problem link

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

i think u can refer geeks for geeks their is a article on it

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

This isn’t the linear time algorithm but binary searching on j will work in O(n log n) which should normally be fast enough for most purposes

»
5 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

Let $$$ S=S_1+ | +S_2 $$$.

Using Suffix Array, construct the LCP array of string $$$S$$$. For each suffix of $$$S_1$$$, find the maximum LCP with the nearest suffixes of $$$S_2$$$ using binary search on the already constructed LCP array of string $$$S$$$.

Complexity: $$$O(n log n)$$$.