014 Longest Common Prefix[E]

1 题目描述

Write a function to find the longest common prefix string amongst an array of strings.

难度:Easy

2 题目样例

无。

3 题目分析

给出一个字符串数组,要求返回其中包含的所有字符串的最长公共前缀。

如果没有公共的前缀的话,返回的自然是””了。

4 思路分析

这道题目虽然简单,但解法却是多种多样的,不过思想上都不难,在此收录最常见的方法供参考,希望读者在看了这些解法之后能开拓思路。如果有更好的方法,可以在评论区分享给大家。

一个比较严肃(可能只是因为我太愚钝了)的问题是,多数的方法似乎在时间复杂度上都没有显著的提升。

我的方法是:套用两重for循环,逐位判断即可。如果我们发现当前某个字符和下一行对应位置的字符不相等,说明不会再有更长的共同前缀了,我们直接通过用substr的方法直接取出共同前缀的子字符串。

如果遍历结束前没有返回结果的话,说明第一个单词就是公共前缀,返回为结果即可。

顺带一提,要记得特判strs为空的情况,否则会产生一个REG的错误。

代码实现如下:

class Solution 

{
    
public:
    
    string longestCommonPrefix(vector<string>& strs)
    
    {
        if(strs.empty())
            
            return "";
        
        for(int i=0;i<strs[0].size();i++)
            
            for(int j=1;j<strs.size();j++)
                
            {
                if(i>=strs[j].size() || strs[j][i]!=strs[0][i])
                    
                    return strs[0].substr(0,i);
            }
        
        return strs[0];
    }
};

《014 Longest Common Prefix[E]》
《014 Longest Common Prefix[E]》 运行时间为7ms,但拍在很靠后的位置

5 后记

我尝试着在提交之后读了读3ms的示例代码,感觉思想上和我的代码并没有什么区别啊…

    原文作者:Lolita
    原文地址: https://zhuanlan.zhihu.com/p/33655156
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞