基本算法之字符串匹配算法Sunday

int sundaySearch(const char *mainStr,const char *subStr)
{
	if(mainStr==NULL || subStr==NULL)
		return -1;
	int mainStrLen=strlen(mainStr);
	int subStrLen=strlen(subStr);
	if(subStrLen>mainStrLen)
		return -1;

	int main_i=0;
	int sub_j=0;

	//设定每个字符最右移动步长,保存每个字符的移动步长
	//如果大串中匹配字符的右侧一个字符没在子串中,大串移动步长= 整个串的距离 +1
	//如果大串中匹配范围内的右侧一个字符在子串中,大串移动距离= 子串长度 - 这个字符在子串中的位置     
        //若已知源字符串中当前窗口最右端外部第一个字符,那么窗口向右至少向右移动多少个单位
        //才能使得源字符串当前窗口与目标字符串完全匹配,charStep就是做这个查表工作
	int charStep[256];
	for(int i=0;i<256;i++)
		charStep[i]=subStrLen+1;
	for(int i=0;i mainStrLen)
					return -1;
				// 计算最少起跳位置
				char firstRightChar=mainStr[tem+subStrLen];
				main_i =tem + charStep[(unsigned char)firstRightChar];
				sub_j=0;   
				break;//退出本次失败匹配 重新一轮匹配
			}  
		}
		if(sub_j == subStrLen)
			return main_i-subStrLen;
	}
	return -1;
}

你可能感兴趣的:(算法)