canuc80k4807·8/50

Mật Khẩu Ba Lần

Nộp bài trên LQDOJ

Bài 48 · Z Function

Tìm xâu khác rỗng dài nhất sao cho là tiền tố của , là hậu tố của , và còn xuất hiện tại ít nhất một vị trí bắt đầu khác hai vị trí ấy. Các lần xuất hiện được phép chồng lấn.

Input

  • Một dòng chứa xâu .

Output

  • In . Nếu không tồn tại, in .

Constraints

  • .
  • chỉ gồm chữ cái thường .
  • Ba lần xuất hiện phải có ba vị trí bắt đầu phân biệt; chúng có thể chồng lấn.

Scoring

  • Subtask (): .
  • Subtask (): Không có giới hạn bổ sung.

Example

Test 1

Input

aaaaa

Output

aaa

Giải thích: Xâu aaa xuất hiện tại các vị trí bắt đầu theo -based; các lần này chồng lấn nhưng vẫn là ba vị trí khác nhau.

Lời giải tóm tắt
  • Ý tưởng: Tính Z, đếm với mỗi L có bao nhiêu vị trí i thỏa Z[i]≥L, rồi duyệt border từ dài xuống.
  • Chứng minh đúng: Điều kiện Z[n-L]≥L xác nhận tiền tố dài L cũng là hậu tố. Tổng số vị trí có Z[i]≥L đếm các vị trí bắt đầu khác nhau, gồm đầu và cuối; nếu số này ít nhất 3 thì có thêm một lần xuất hiện, dù có thể chồng lấn. Duyệt L giảm dần trả ứng viên dài nhất.
  • Độ phức tạp: O(n) thời gian và O(n) bộ nhớ.
  • Mẫu công khai: Trong aaaaa, tiền tố aaa cũng là hậu tố và xuất hiện thêm từ ký tự thứ 2; không có ứng viên dài 4 xuất hiện ba lần.