题解 | #最长公共前缀#

最长公共前缀

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

题意思路:

题目给出长度为n的子串,找出子串中最长的公共前缀。

方法一:子串纵向查找

纵向遍历非常的直观,如下图所示,将每个字符串分别依次遍历每一列的元素,比较相同列上字符是否相同,若相同则比较下一个子串,若不同则最长公共前缀为上个遍历过的公共前缀。

复杂度分析:
时间复杂度:O(mn),其中n 是字符串的数量,m 是字符串数组中的字符串的平均长度。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。

空间复杂度:O(1)。额外空间复杂度为常数。

演示子串纵向查找方式:
算法演示图

class Solution {
public:

    string longestCommonPrefix(vector<string>& strs) {
        // write code here
        if(!strs.size())return "";//特判若子串为空则返回空值
        for(int i=0;i<strs[0].size();i++){//枚举第一个子串的每个字符
            for(int j=1;j<strs.size();j++){//枚举后面所有子串
                if(strs[0][i]!=strs[j][i]||i==strs[j].size()){//比较后面所有子串的第i列字符和第j个子串的长度
                    return strs[0].substr(0,i);//若字符不相同或者长度为最小则返回最长公共前缀
                }
            }
        }
        return strs[0];
    }
};

方法二:排序后子串纵向查找

先将所以子字符串按照字典序的大小排序,想要得到最长公共前缀,只需要将字典序最小的子串A与字典序最大的B比较相同部分,得到的最长公共前缀就是所有子串的公共前缀。

复杂度分析:

时间复杂度:O(nlogn),其中n 是字符串的数量,排序算法时间复杂度O(nlogn)。

空间复杂度:O(1)。额外空间复杂度为常数。

class Solution {
public:

    string longestCommonPrefix(vector<string>& strs) {
         if(!strs.size())return "";
         sort(strs.begin(),strs.end());//按照字典序排序得到所有子串顺序
         string a=strs.front(),b=strs.back();//枚举第一个最小的子串和最后一个最大的子串
         int i=0;
         for(i=0;i<a.size()&&a[i]==b[i];i++);//若字符相同则继续比较否则返回最长公共前缀串
         return a.substr(0,i);

    }
};
全部评论
方法二:排序后子串纵向查找 时间复杂度应该是o(n*log(n)*len)叭,n为字符串的数量,len为字符串的平均长度排序时就要对字符串进行比较,而字符串又是有长度的,每次比较都是在进行遍历。 从感性的角度看,一个字符串往往不止需要一次与其它字符串进行比较,相比方法一,方法二的时间复杂度是要更大的。
1 回复 分享
发布于 2022-10-05 16:52 湖南
方法二在对字符串按字典序排序,底层原理是按位计算字符串的幂和,它与字符串长度有关
点赞 回复 分享
发布于 2023-04-22 08:44 湖北

相关推荐

面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-20 20:30
点赞 评论 收藏
分享
喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
31
8
分享

创作者周榜

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