LeetCode 14. Longest Common Prefix
题目要求:找出一组字符串中的最长公共前缀。
题目给出的框架如下:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
}
};
解题思路:
采用的是很直接的方法,如果为输入字符串个数为0,则直接返回空字符串,如果只有一个字符串,则直接返回该字符串,即:strs[0]。接下来就是将strs[0]的第i个字符strs[0][i]与其它字符串的第i个字符strs[j][i]进行比较了,如果全部相等,则最长公共前缀pre加上该字符,如果出现不相同,则直接返回之前的结果pre。
代码实现如下:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.size() == 0)
return "";
if (strs.size() == 1)
return strs[0];
string pre = "";
for (int i = 0; i < strs[0].length(); ++i) {
for (int j = 1; j < strs.size(); ++j) {
if (strs[0][i] != strs[j][i])
return pre;
}
pre += strs[0][i];
}
return pre;
}
};
最后发现,LeetCode耗时最短的大神也是采用这种算法(3ms),没有看出差别,但是速度确是我的三倍(9ms)。
LeetCode大神代码实现如下:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int size = strs.size();
if (size == 0)
return "";
int len = strs[0].size();
if (size == 1)
return strs[0];
string rst = "";
int j = 0;
for (; j < len; j++){
int i = 1;
for (; i < size; i++){
if (strs[i][j] != strs[0][j])
return rst;
}
rst += strs[0][j];
}
return rst;
}
};