【发布时间】:2014-10-07 19:02:35
【问题描述】:
给定一个字符串数组,我试图找到给定子字符串开始和结束的索引。 这是我的代码:
#include <stdio.h>
void find_sub_string(char *str, char *sub){
int start= 0;
int end = 0;
int i=0,j=0;
while((str[i] != '\0') ){
if( str[i] == sub[j]){
if(j == 0){
start = i;
}
i++,j++;
} else if(str[i] != sub[j]){
j=0;
if(str[i] == sub[j]){
start = i;
j++,i++;
} else{
i++;
}
}
if (sub[j] == '\0'){
end = i-1;
printf("The start is: %d ,and end is : %d\n",start,end);
return;
}
}
printf("The substring %s was not found in string %s\n",sub,str);
return;
}
int main(){
char str[] = "internet";
char sub[] = "net";
find_sub_string(str,sub);
return 0;
}
我认为运行时间是 O(n),但我不相信,因为在 else if 语句中,每次看到 str[i ] != 子[j]。我担心它可能会导致运行时间不是 O(n)。
P.s 这不是家庭作业问题。我只是在练习问题。
【问题讨论】:
-
只有一个循环,它遍历原始字符串。
j在这里无关紧要,因为它不会影响循环的迭代次数。这是O(n)。 -
可能有助于看看会发生什么,如果您将
printf("i=%d j=%d at line %d\n", i, j, __LINE__);添加到两个内部 if-else 的每个“then”和“else”分支(所以添加 else到第一个)。