canuc80k6215·16/50

Độ Dài Đoạn Chung Dài Nhất

Nộp bài trên LQDOJ

Bài 62 · Suffix Structures

Cho hai xâu chữ thường và . Một đoạn chung là một xâu xuất hiện liên tiếp trong cả lẫn . Hãy tìm độ dài lớn nhất của một đoạn chung.

Khác với dãy con, các ký tự của đoạn được chọn phải nằm ở những vị trí liên tiếp trong mỗi xâu. Nếu hai xâu không có ký tự chung, đáp án bằng .

Input

  • Dòng thứ nhất chứa xâu .
  • Dòng thứ hai chứa xâu .

Output

  • In một số nguyên: độ dài của đoạn chung dài nhất của và .

Constraints

  • .
  • Mỗi xâu chỉ gồm các chữ cái thường .

Scoring

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

Example

Test 1

Input

abacaba
zzacabx

Output

4

Giải thích: Xâu acab có độ dài và xuất hiện liên tiếp trong cả hai xâu; không có đoạn chung nào dài hơn.

Lời giải tóm tắt
  • Ý tưởng: Dựng suffix automaton của A. Khi quét từng ký tự của B, trạng thái hiện tại mô tả hậu tố dài nhất của phần đã quét cũng là xâu con của A. Nếu thiếu transition, lùi qua suffix link cho đến khi tìm được transition phù hợp hoặc về gốc; đồng thời co độ dài đang khớp về giới hạn của trạng thái mới. Giá trị lớn nhất trong suốt quá trình là đáp án.
  • Ý tưởng: Mỗi lần lùi suffix link làm giảm độ dài trạng thái, nên tổng thời gian là O(|A| + |B|). Automaton có không quá 2|A|-1 trạng thái và dùng O(|A|) bộ nhớ với bảng 26 chữ cái.