谁能帮助我计算以下内容的复杂性?
我已经为家庭作业编写了一个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)解决方案。

10-02 05:06