A - KMP 모드 일치(문자열)

963 단어
A - KMP 모드 일치(문자열)
Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu
Submit 
Status
Description
서브열의next값을 구하고,next수조로 저장하고, 모두 출력합니다
Input
문자열 입력
Output
모든next 값 내보내기
Sample Input
abaabcac

Sample Output
0 1 1 2 2 3 1 2

코드:
#include <iostream>
#include <cstring>
using namespace std;
int len;
void getnext(char str[],int next[])
{
   int i,j;
   i=1;j=0;
   next[1]=0;
   while(i<=len)
   {
	   if(j==0||str[i]==str[j])
	   {
		   ++i;++j;
		   next[i]=j;
	   }
	   else
		   j=next[j];
   }
}
int main()
{
	char str[10000];
	int next[10000];
	int i,j;
	cin>>str;
	len=strlen(str);
	for(j=len;j>0;j--)
		str[j]=str[j-1];
	getnext(str,next);
	for(i=1;i<=len;i++)
	{
		cout<<next[i];
		if(i<len)
			cout<<' ';
	}
	cout<<endl;
	return 0;
}

좋은 웹페이지 즐겨찾기