方法一
由两层循环嵌套:一个是遍历第一个字符串中的所有字符;另一个是遍历整个字符串向量,即一个一个比较,这种方法的空间复杂度小,但耗时较长
Runtime | Memory |
---|---|
12ms | 8.6MB |
具体代码如下:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty())
return "";
for(int i=0;i<strs[0].length();i++){
for(int j=1;j<strs.size();j++)
if((i>=strs[0].length())||(strs[j][i]!=strs[0][i]))
return strs[0].substr(0,i);
}
return strs[0];
}
};
方法二
Runtime | Memory |
---|---|
8ms | 8.8MB |
bool cmp(const string &s1, const string &s2){
return s1.size() < s2.size();
}
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int i,j;
string result="";
if(strs.size()==0)
return "";
sort(strs.begin(),strs.end(),cmp);
for(j=0;j<strs[strs.size()-1].length();j++){
i=0;
while(i<(strs.size()-1)&&strs[i][j]==strs[i+1][j]){
i++;
}
if(i==strs.size()-1)
result+=strs[i][j];
else
break;
}
return result;
}
};