谁能帮助我计算以下内容的复杂性?
我已经为家庭作业编写了一个strStr函数,尽管它不是我的作业的一部分,但我想弄清楚它的复杂性。
基本上它需要一个字符串,找到子字符串的第一次出现,返回它的索引,
我相信它是O(n),因为尽管它最多是双循环的,但它只会运行n次,其中n是s1的长度,对吗?
int strStr( char s1[] , char s2[] ){
int haystackInd, needleInd;
bool found = false;
needleInd = haystackInd = 0;
while ((s1[haystackInd] != '\0') && (!found)){
while ( (s1[haystackInd] == s2[needleInd]) && (s2[needleInd] != '\0') ){
needleInd++;
haystackInd++;
}
if (s2[needleInd] == '\0'){
found = true;
}else{
if (needleInd != 0){
needleInd = 0;
}
else{
haystackInd++;
}
}
}
if (found){
return haystackInd - needleInd;
}
else{
return -1;
}
}
最佳答案
它确实是O(n),但也无法正常运行。考虑在“nanand”中查找“nand”
但是,有一个O(n)解决方案。