题目:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
思路:水平比较
首先,我们将描述一种查找一组字符串的最长公共前缀 LCP(S1…Sn) 的简单方法。
根据 LCP(S1…Sn) = LCP(LCP(LCP(S1, S2), S3), ..., Sn);
所以逐次遍历 (S1...Sn) ,找到LCP(S1...Si)。当LCP(S1...Si)为一个空串时结束,否者执行到第n次时返回的就是最终答案。
代码如下:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
//水平比较
string s = strs.size() ? strs[0] : "";
for(auto p:strs){
while(p.substr(0,s.size()) != s){
s = s.substr(0,s.size()-1);
if(s == "") return "";
}
}
return s;
}
};
思路二:垂直比较
逐一比较每个字符串的第i个字母,当存在不相等的时候结束
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int index = 0;
if(strs.size() == 0){
return "";
}
string res;
while(index < strs[0].size()){
char temp = strs[0][index];
for(int i = 1; i < strs.size(); i++){
if(strs[i].size() <= index || strs[i][index] != temp){
return res;
}
}
res += temp;
index++;
}
return res;
}
};