LeetCode——第十二天
14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:所有输入只包含小写字母 a-z 。
分析:官方解答好几种,反正我就想到一种暴力破解,也就是每一个对比,官方有改了下,好像不错。另一种就是比较每一列的是不是一样的,我觉得第二个更快点。然后看了下别人第一种很多直接用find之类的函数,感觉还是全部写好点
垂直比较代码:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string result = "";
if(strs.size()==0) 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])
{
return result;//当前的result即为最长公共前缀
}
}
result += strs[0][i];
}
return result;
}
};
大佬改进(省掉了开销,代码量少)
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==0) 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])
return strs[0].substr(0,i);//不相等直接截取当前0-i的字符串返回
return strs[0];
}
};
横向,也就是第一种方法
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string r = strs.size() ? strs[0] : "";//若不为空,r为第一个字符串,否则为空
for(auto s: strs){//auto,这里的意思是遍历strs,s是被赋值,就是每个字符串
while(s.substr(0, r.size()) != r){
r = r.substr(0, r.size() - 1);//如果有一个s的r.size跟r比较不相等,那么r长度就减一,继续遍历
if(r == "") return r;//如果减到空,则直接返回
}
}
return r;
}
};
2.总结
auto