두 가지 질문이 있습니다.
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 이 일치할 때 해당하는 숫자를 주로 저장하는 것을 요청했습니다.