<commit_before>#pragma once

long kmp( unsigned char * master, unsigned char * pattern, long start )
{
	int j = 0;
	long i = start;
	int t = strlen( pattern );
	long L = strlen( master );

	for(; i < L&&j < t; i++)
	{
		if(*(master + i) == *(pattern + j))
		{
			j++;
		}
		else
		{
			j = 0;
		}
	}
	return i-start;
}
//TODO:˴kmp㷨ʵֲɹ
//void getnext( char p[], int next[] )
//{
//	int k = -1;
//	int j = 0;
//
//	next[j] = k;
//
//	while(j < strlen( p ))
//	{
//		if((k == -1) || (p[j] == p[k])) //עȺ===  
//		{
//			++k; // עȼӺʹ  
//			++j;
//			next[j] = k;
//		}
//		else
//		{
//			k = next[k];
//		}
//	}
//
//}
//
//long kmp( char * master, char * pattern, long i )
//{
//	int j = 0;
//	int next[50] = { 0 };
//
//	getnext( pattern, next );
//	while((i < strlen( master )) && (j < strlen( pattern )))
//	{
//		/* j = -1 ʾnext[0], ˵ʧ䴦ģʽTĵ0ַ⴦Ȼi+1j+1*/
//		if((j == -1) || master[i] == pattern[j])
//		{
//			i++;
//			j++;
//		}
//		else
//		{
//			j = next[j];
//		}
//	}
//
//	if(strlen( pattern ) == j)
//	{
//		return i - strlen( pattern );
//	}
//	else
//	{
//		return -1;
//	}
//
//}<commit_msg>修复kmp匹配<commit_after>#pragma once
//TODO:˴ƥɹ
//long kmp( unsigned char * master, unsigned char * pattern, long start )
//{
//	int j = 0;
//	long i = start;
//	int t = strlen( pattern );
//	long L = strlen( master );
//
//	for(; i < L&&j < t; i++)
//	{
//		if(*(master + i) == *(pattern + j))
//		{
//			j++;
//		}
//		else
//		{
//			j = 0;
//		}
//	}
//	return i-start;
//}
//TODO:˴kmp㷨ʵֲɹ
int next[60];

void get_next( char* t, int next[] )
{
	int i = 1;
	int j = 0;
	next[0] = -1;
	while(i<strlen( t ))
	{
		if(j == -1 || t[i] == t[j])
		{
			i++;
			j++;
			if(t[i] != t[j])   //ֻǰַͬʱŻᰴǰ㷨next next[i] = j
				next[i] = j;
			else
				next[i] = next[j];        //ǰַͬʱǰңܹٱȽϵĴ
		}
		else
		{
			j = next[j];
		}
	}
}

int kmp( char *master, char *pattern ,long start)
{
	get_next( pattern, next );
	long i = start;
	int j = 0;
	int len1 = strlen( master );
	int len2 = strlen( pattern );
	while(i < len1&&j < len2)
	{
		if(j == -1 || master[i] == pattern[j])//һַƥַȵ
		{
			i++;
			j++;
		}
		else   //iָ벻,jָ
		{
			//i=i-j+1;
			j = next[j];
		}
	}
	if(j >= len2)
		return i - start;
	else
		return -1;
}
{'fraction_non_alphanumeric': 0.2751131221719457, 'fraction_numerical': 0.015384615384615385, 'mean_word_length': 1.7672090112640801, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6035149', 'n_tokens_mistral': 1221, 'n_tokens_neox': 1172, 'n_words': 246}