Блог пользователя Secret.Codes

Автор Secret.Codes, история, 7 лет назад, По-английски

Is it possible to get the length of biggest substring which is palindrome on a string on O(n)??

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

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

There are two ways that I know of to solve this.

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

Hashes + 2 pointers

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

    Can you explain how this will work?

    • »
      »
      »
      7 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +44 Проголосовать: не нравится

      We can use the idea similar to 2 pointers instead of binary search.

      1. Fix the "center" of palindrome
      2. Check all subsrtings that have greater length, that previous answer does.
      3. Update answer if it is possible

      It will be O(N)

    • »
      »
      »
      7 лет назад, # ^ |
        Проголосовать: нравится +29 Проголосовать: не нравится

      We will visit all centers, it's O(n). In every position we will try to update answer. All updates will work summary O(ans) = O(n), so algorithm's complexity is O(n).

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится -18 Проголосовать: не нравится

    I only know O(n log n) solution with hashes using binary search, how can it be done in O(n)?

    • »
      »
      »
      7 лет назад, # ^ |
        Проголосовать: нравится +19 Проголосовать: не нравится

      If we change

      for (int len = 0; len <= max_possible; i++)

      in naive O(N^2) solution to

      for (int len = ans; len <= max_possible; i++)

      it will improove complexity to O(N)