题解 | #最长公共前缀#

最长公共前缀

https://www.nowcoder.com/practice/28eb3175488f4434a4a6207f6f484f47

C语言

char* longestCommonPrefix(char** strs, int strsLen ) {

    // write code here

    int pre_i = 0, str_i = 0, len = 0;

    char * tmpstr = *strs;              //获得第一个字符串的指针,用于计算第一个字符串的长度来申请存储公共前缀的空间。

    while(tmpstr && *tmpstr != '\0'){   //最大公共前缀的长度是以最短的字符串来决定的,为了方便以第一个字符串的长度来申请

        len++;

        tmpstr++;

    }

    // char prefix[5]={0};              //测试代码

    char *prefix = (char*)malloc(sizeof(char)*(len+1));//以第一个字符串的长度+1来动态申请公共前缀的存储空间

    prefix[pre_i] = '\0';               //初始化公共前缀,默认为空

    if(strsLen == 0){                   //如果输入字符串数组为空,则返回空的公共前缀

        return prefix;

    }

    while(strs[0][str_i] != '\0' && strs[0][str_i] != NULL){      //如果第一个字符串的str_i位不为结尾,继续循环

        //将第一个字符串的str_i位存储到prefix中,后面用来与其他字符串的对应位进行比较

        prefix[str_i] =  strs[0][str_i];  

        for(int i=1; i<strsLen; i++){   //遍历第1个数组及以后剩余数组

            if(prefix[str_i]  != strs[i][str_i]){   //比较prefix与其他数组对应位是否一致

                prefix[str_i]='\0';     //如果不一致则表明prefix的str_i位不为公共部分,置空并返回

                return prefix;

            }

        }

        str_i++;                        //全部数组的str_i位均一致,移到str_i+1位进行下一次比较

    }

    prefix[str_i]='\0';                 //如果运行到这里,则表示第一个字符串str_i位为空,即第一个字符串到末尾了,需要末尾置空

    return prefix;                      

}

全部评论

相关推荐

白火同学:大二有这水平很牛了,可以适当对关键信息加粗一点,比如关键技术、性能指标之类的。
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务