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];
}
};
运行时间为7ms,但拍在很靠后的位置
5 后记
我尝试着在提交之后读了读3ms的示例代码,感觉思想上和我的代码并没有什么区别啊…