2011-07-18 62 views
1

這裏是一個普遍實現類似的efficent版本的strstr

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,如果我們有aaaaaaaaaaaaaaaaaaaaaaaa(假設src和STR很長,長度他們非常接近)。

我可以有更好的算法嗎?

+0

它是'O(nk)',而不是'O(n^2)'。我認爲你的情況需要'我<= src.len-str.len'。但你的問題是什麼? –

+0

你的問題是什麼? – bdonlan

回答

2

你可以使用Boyer-Moore算法,它是O(n)。 Here's示例C代碼。

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; 
    }