int Index(SString S,SString T){
int i = 1,j = 1;
while(i<=S.length && j<=T.length){
if(S.ch[i] == T.ch[j]){
++i; ++j; //继续比较后继字符
}
else{
i=i-j+2;
j=1; //指针后退重新开始匹配
}
}
if(j>T.length)
return i-T.length;
else
return 0;
}
1、算法思想:
(1)主串长度n,模式串长度m
(2)将主串中所有长度为m的子串与模式串对比
(3)找到第一个与模式串匹配的子串,并返回子串起始位置
(4)若所有子串都不匹配,则返回0
2、最坏时间复杂度=O(nm
3、若当前子串匹配失败,则
(1)主串指针i指向下一个子串的第一个位置 i = i - j + 2
(2)模式串指针j 回到模式串的第一个位置 j = 1
4、若 j > T.length,则当前子串匹配成功,返回当前子串第一个字符的位置 i - T.length