문자열 찾기

아직 제출이 없습니다시간 제한3초메모리 제한1024 MB

문제

영어 소문자로 구성된 두 문자열 AABB에 대해서 다음의 조건이 만족될 때, 두 문자열은 “사실상 같다”고 한다.

  1. AABB의 길이가 같다.
  2. 모든 가능한 정수 iijj에 대해 AAii번째와 jj번째 글자가 같으면 BBii번째와 jj번째 글자도 같다.
  3. 모든 가능한 정수 iijj에 대해 AAii번째와 jj번째 글자가 다르면 BBii번째와 jj번째 글자도 다르다.

예를 들어, A=A = abaB=B = pqp는 사실상 같은 문자열들이다. 하지만, A=A = abcaB=B =abcb는 사실상 같은 문자열의 쌍이 아니다.

문자열 TTPP를 받아서 TT의 연속된 부분문자열들 중 PP와 사실상 같은 부분문자열의 개수를 계산하는 프로그램을 작성하라.

예를 들어, T=T =abababbab이고 P=P =pqp인 경우 TT의 왼쪽부터 aba, bab, aba, bab, bab55개의 부분문자열이 PP와 사실상 같은 것들임을 알 수 있다. 여러분은 다음 함수를 작성하여야 한다.

  • int findP( char T [], char P [], int N, int M ) : T는 길이 N+1인 배열(문자열)이다. P는 길이 M+1인 배열이다. TP에는 각각 길이 NM인 영어 소문자 문자열이 저장되어 있다. TP의 마지막 위치에는 ‘\0’이 저장되어 있다. findPT의 연속된 부분문자열들 중 P와 사실상 같은 부분문자열의 개수를 리턴해야 한다.

제한

  • 1N1,000,0001 ≤ N ≤ 1\\,000\\,000, 1MN1 ≤ M ≤ N.