Sunday查找
直接看代码吧懒得打字
int Sunday(char* src,char* arr)
{
if(src == NULL || arr == NULL) return -1;
//申请辅助数组,用空间换时间,省去遍历的过程
char* ptemp = (char*)malloc(sizeof(char)*256);
memset(ptemp,-1,sizeof(char)*256);
int size = strlen(arr);
int length = strlen(src);
//子串中的元素从左到右赋值到数组中
//通过字符可以直接得到它在子串中的位置
int i;
for(i=0;i<size;i++)
ptemp[arr[i]] = i;
int j=0;
int index = 0;
int k;
for(i=0;i<length;)
{
//如果子串元素和父串元素相等,两个一起向后走
if(src[i] == arr[j])
{
j++;
i++;
if(j == size)
break;
}
else
{
//看子串对应主串的下一个在不在子串里
if(i-j+size < length)
{
//i-j-size是从开始加一个子串长度的下标
//k是查找的字符在子串中的下标
k = ptemp[src[i-j+size]];
//重新给i赋值,再开始匹配
i = i-j+size-k;
//子串也从头开始
j = 0;
}
}
}
if(j == size)
return i-size;
return -1;
}