这是一般性实施
int stridx (char[] src, char[] str){
int i,j,k;
for(i=0;i < (src.len - str.len);i++){
for(j=i,k=0; str[k] != '\0' && str[k] == src[i]; j++,k++);
if( k> 0 && str[k]=='\0') return i;
}
return -1;
}
算法的最坏情况可能是n ^ 2,如果我们有aaaaaaaaaaaaaaaaaaaaaa(假设src和str都非常长,并且它们的长度非常接近)。
我可以有更好的算法吗?
答案 0 :(得分:2)
您可以使用Boyer-Moore算法,即O(n)。 Here's示例C代码。
答案 1 :(得分:0)
没有必要计算字符串的长度:
char *strr(char *s1,char *s2)
{
int i,j;
for(i=0;s1[i];i++)
if(s1[i]==s2[0])
for(j=0;s1[i+j]==s2[j];j++)
if(!s2[j+1]) return &s1[i];
return NULL;
}
答案 2 :(得分:0)
http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm是另一种线性时间算法。 OTOH,简单的算法保留,因为在实践中,它们对于人们实际搜索的大多数字符串来说都更快。