ここ

2011-07-18 6 views
1

をSTRSTRに似efficentバージョンは一般的な実装ここ

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

である我々はaaaaaaaaaaaaaaaaaaaaaaaa(SRCとstrの両方が非常に長いと仮定すると、長さを持っている場合は、アルゴリズムの最悪のケースでは、^ 2のnかもしれませんそれらの非常に近いです)。

もっと良いアルゴリズムはありますか?

+0

これは 'O(n^2)'ではなく 'O(nk)'です。あなたの条件は 'i <= 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; 
    }