class Solution {
public:
string longestCommonPrefix(vector<string>& strs) { if(strs.size()==) return "";
if(strs.size()==) return strs[];
string com_str=strs[];
for(auto i=strs.begin();i<strs.end();i++)
{
while((*i).find(com_str,)!=)
{
com_str=com_str.substr(,com_str.size()-);
if(com_str.size()==) return "";
}
}
return com_str;
}
};
算法二:水平扫描
算法
想象数组的末尾有一个非常短的字符串,使用上述方法依旧会进行 SS 次比较。优化这类情况的一种方法就是水平扫描。我们从前往后枚举字符串的每一列,先比较每个字符串相同列上的字符(即不同字符串相同下标的字符)然后再进行对下一列的比较。
//水平扫描 class Solution {
public:
string longestCommonPrefix(vector<string>& strs) { if(strs.size()==) return "";
if(strs.size()==) return strs[];
string com_str=strs[];
for(int i=;i<com_str.size();i++)
{
char c=com_str[i];
for(int j=;j<strs.size();j++)
{
if(strs[j].size()==i||strs[j][i]!=c)
return com_str.substr(,i);
}
}
return com_str;
}
};