【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)
【题目描述】
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
【示例一】
输入:strs = ["flower","flow","flight"] 输出:"fl"
【示例二】
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
【提示及数据范围】
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
【代码】
// 方法一:横向枚举
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(!strs.size()){
return "";
}
string prefix = strs[0];
int count = strs.size();
for(int i = 1;i<count;i++){
prefix = longestCommonPrefix(prefix,strs[i]);
if(!prefix.size()) break;
}
return prefix;
}
string longestCommonPrefix(const string& str1,const string& str2){
int length = min(str1.size(),str2.size());
int index = 0;
while(index < length && str1[index] == str2[index]){
index++;
}
return str1.substr(0,index);
}
};
// 方法二:纵向枚举
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (!strs.size()) {
return "";
}
int length = strs[0].size();
int count = strs.size();
for (int i = 0; i < length; ++i) {
char c = strs[0][i];
for (int j = 1; j < count; ++j) {
if (i == strs[j].size() || strs[j][i] != c) {
return strs[0].substr(0, i);
}
}
}
return strs[0];
}
};