以下代碼返回字符串s1中的第一個位置,其中字符串s2中的任何字符出現。它最糟糕的時間複雜度是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);
}
我不知道... –
你需要定義你的主要操作,我假設它是對數組元素的訪問。 如果長度(s1)= m且長度(s2)= n,並且最糟糕的情況是您最終會遍歷s1的所有字符,那麼您最終會訪問m + n個陣列位置(至少n個,因爲您總是複製s2中的所有元素) – AlvaroGMJ
如果s2'爲NULL,但s1'不是,或者如果char有符號並且任何一個字符串都包含負的char,那麼該函數可能會突然中斷。 –