次のコードは、文字列 s2 の任意の文字が出現する文字列 s1 内の最初の位置を返します。その最悪の時間計算量は O(m+n) です。どのように?
#include<stdio.h>
int any(char *s1, char *s2)
{
char array[256];
int i;
if (s1 == NULL) {
if (s2 == NULL) {
return(0);
} else {
return(-1);
}
}
for(i = 0; i < 256; i++) {
array[i] = 0;
}
while(*s2 != '\0') {
array[*s2] = 1;
s2++;
}
i = 0;
while(s1[i] != '\0') {
if (array[s1[i]] == 1) {
return(i);
}
i++;
}
return(-1);
}