题解 | #最长公共前缀#

最长公共前缀

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

2022.0824算法第42题最长公共前缀
横向比较,先判断前两个的最长公共前缀,然后用得到的结果与后面的字符串比较
每个更新最长公共前缀,最终得到全部字符串的最长公共前缀。
获取两个字符串的前缀方法,while循环找到第一个不相等的位置即可,我刚开始为什么会觉着需要双层循环?
前缀的起点已经固定了,而且两个字符串的终点一致,只需要一个变量就能够把所有情况表示出来。
//获取两个字符串的最长公共前缀
string getPrefix(string str1,string str2){
    //记录第一个不相等的位置
    int i=0;
    //确保不越界,取两个字符串的最小值
    int minL=min(str1.size(),str2.size());
    //当字符串中的第i个字符相等时,继续寻找下一个
    while(i<minL&&str1[i]==str2[i]){
        i++;
    }
    //获取前缀子串
    return str1.substr(0,i);
}
string longestCommonPrefix(vector<string>& strs) {
    //空字符串的情况,下面默认最少一个
    if(strs.size()==0){
        return "";
    }
    //这里最少要有一个元素,可以认为第一个元素于第一个元素的最长公共前缀
    string prefix=strs[0];
    //循环比较前缀和当前字符串的最长公共前缀
    for(int i=1;i<strs.size();i++){
        //计算当前字符串与前面最长公共前缀的最长公共前缀
        prefix=getPrefix(prefix, strs[i]);
    }
    //返回前缀
    return prefix;
}


#算法题#
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务