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;
}
};