顺序串算法2

问题描述:从串S中第index个字符起求出首次与与字符串S1相同的子串的起始位置。


算法思路:从第index 个字符开始扫描串S,当其元素值与S1的第一个字符相等时,判定他们之后的元素值是否依次相同,直到S1结束为止。若都相同则返回,否则继续上述过程直到S扫描完为止。


//算法1
int part(SqString &S,SqString &S1,int index)
{
	int i=index,j=0;
	while(i<S.length&&j<S1.length)
	{
		if(S.data[i]==S1.data[j])
		{
			i++;
			j++;
		}
		else
		{
			i=i-j+1;
			j=0;
		}
	}
	if(j>=S1.length)
		return (i-S1.length);
	else
		return -1;
}


//算法2

int Part(SqString S,SqString S1,int index)
{
	int i,j,k;
	int n=S.length;
	int m=S1.length;
	for(i=index;i<n-m;i++)
	{
		for(j=0,k=i;j<m&&S1.data[j]==S.data[k];j++,k++);
		if(j==m)
			return i;
	}
	return -1;
}


原文地址:https://www.cnblogs.com/keanuyaoo/p/3293951.html