Write a function to find the longest common prefix string amongst an array of strings.
关于这个题目的描述有歧义,究竟是求解所有字符串的最长公共前序,还是求解每对字符串中的最长的公共子序列。本题的实际是前一种情况。
思路一:思路很直接,就像直男癌一样。。。但需要注意边界输入的处理
代码如下:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string result = "";
if(strs.size() == 1)
return strs[0];
for(int ind =0; strs.size() > 0;result+=strs[0][ind],ind++)
for(int i=1;i<strs.size();i++)
if(ind >= strs[i].size() || strs[0][ind] != strs[i][ind])
return result;
return result;
}
};
思路二先对字符串进行排序,再求首尾两个字符串的公共前序,即为题目的求解。该思路的效率并没有提升。。。
代码如下:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string result = "";
if (strs.size() > 0){
sort(strs.begin(),strs.end());
string a = strs[0];
string b = strs[strs.size()-1];
for (int i = 0; i < a.length(); i ++){
if (b.length() > i && b[i] == a[i]){
result += b[i];
}
else {
return result;
}
}
}
return result;
}
};