아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

최장 공통 부분 문자열

시간 제한1초메모리 제한256 MB

요약
두 소문자 문자열에 공통으로 들어 있는 가장 긴 부분 문자열의 길이와 그 중 사전 순으로 가장 앞선 문자열을 출력합니다.
난이도

보통10점 중 7점

유형
문자열 매칭, 이분 탐색, 해시맵, 정렬
정답자
아직 제출이 없습니다

문제

문자열 T=t1t2…tmT = t_1 t_2 \dots t_m이 문자열 S=s1s2…snS = s_1 s_2 \dots s_n의 부분 문자열이라는 말은, si+1si+2…si+m=Ts_{i+1} s_{i+2} \dots s_{i+m} = T를 만족하는 0≤i≤n−m0 \le i \le n - m이 있다는 뜻이다. 부분 문자열은 SS에서 연속한 구간을 그대로 잘라낸 것이다.

두 문자열 AA와 BB가 주어진다. AA의 부분 문자열이면서 BB의 부분 문자열이기도 한 문자열 중 가장 긴 것의 길이와, 그 길이를 가지는 공통 부분 문자열 중 사전순으로 가장 앞서는 것을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 문자열 AA가, 둘째 줄에 문자열 BB가 주어진다. 두 문자열은 알파벳 소문자로만 이루어져 있고, 두 문자열 길이의 합은 200,000을 넘지 않는다.

출력

첫째 줄에 두 문자열의 최장 공통 부분 문자열의 길이를 출력한다.

그 길이가 0보다 크면 둘째 줄에 같은 길이의 공통 부분 문자열 중 사전순으로 가장 앞서는 것을 출력한다. 공통 부분 문자열이 없으면 첫째 줄에 0만 출력하고 둘째 줄은 출력하지 않는다.

예제3

  1. 예제 1

    입력
    yeshowmuchiloveyoumydearmotherreallyicannotbelieveit
    yeaphowmuchiloveyoumydearmother
    
    예상 출력
    27
    howmuchiloveyoumydearmother
    
  2. 예제 2

    입력
    abxcd
    cdxab
    
    예상 출력
    2
    ab
    
  3. 예제 3

    입력
    abc
    xyz
    
    예상 출력
    0