현재 위치 - 주공해몽공식사이트 - 관음보살의 랜덤 번호 뽑기 - C 언어 OJ 에 대한 질문: 시간 제한을 초과했습니다.

C 언어 OJ 에 대한 질문: 시간 제한을 초과했습니다.

코드를 디버그합니다.

두 가지 질문이 있습니다.

Ori 문자열 자체가 pat 보다 짧으면 일치가 필요하지 않으며 직접 결과는 0 입니다.

I 자가 일치하는 경우 테스트의 네 번째 그룹 번호는 pat 가 처음부터 일치하지만 실제로는 pat 아래 첨자가 3 인 곳에서 일치합니다.

마지막으로 코드가 너무 많고 논리적 판단이 속도에 영향을 주며 KMP 함수 코드가 포함되어 있습니다.

Int? KMP (찰스? *ori,? 샤일? *pat)

{

샤일? * 온도? * p;;

Int? Num? =? 스트런 (팻);

Int? 나? =? 0,? J? =? 0;

Int? * 다음;

Int? 샘? =? 0;

//다음 배열 찾기

다음? =? (int? *)malloc((num? +? 1) * sizeof (int));

Memset((int? *) 다음에? 0,? (num? +? 1) * sizeof (int));

P? =? 임시직? =? 팻

Pa t++;

언제? (* 팻)

{

만약? (* 팻? = =? * 온도)

{

* (다음? +? 나? +? 2)? =? J? +? 1;

Pa t++;

Temp++;+;

J++;+;

}

기타

{

Pa t++;

J? =? 0;

}

I++;+;

}

//문자열 일치

팻? =? P;

나? =? 0;

언제? (*ori)

{

만약? (스트린 (ori)? & lt? 스트런 (팻))

깨뜨리다

만약? (*ori? = =? *pat)

{

Or I++;

Pa t++;

I++;+;

만약? (* 팻? = =? \ "0 \")

{

Su m++;

팻? =? P? +? 다음 [나];

나? =? 다음 [나];

}

}

기타

{

만약? 나? = =? 0)

Or I++;

팻? =? P? +? 다음 [나];

나? =? 다음 [나];

}

}

반환? 합계; -응?

} 다음으로 0 이 일치할 때 해당하는 숫자를 주로 저장하는 것을 요청했습니다.