如何求最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""
。
输入: strs = ["flower","flow","flight"]
输出: "fl"
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
方法一-纵向扫描
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
//纵向扫描
if(strs.size()==0) return "";
int rows = strs.size(); //行数
int cols = strs[0].size(); //列数
for(int i=0;i<cols;i++)
{
char firstChar = strs[0][i]; //纵向扫描 记录第0行第i列(就是每一列的第一个)
for(int j=1;j<rows;j++)
{
if(strs[j][i] !=firstChar || strs[j].size() ==i)
//同一列中下面行中的值不和第0行的相等或者 下面行的列数比较小恰好等于此时遍历的列数(就是比较短)
return strs[0].substr(0,i);
//利用substr函数复制
}
}
return strs[0];
}
};
方法二-横向扫描
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==0) return "";
//横向扫描
string prefix = strs[0];
for(int i=1;i<strs.size();i++) //横向扫描从 第二个单词开始比较
{
prefix= longestCommonPrefix2(prefix,strs[i]); //比较第0行和第i行(即第一个字符串和第i个字符串)
if(prefix.size()==0) return "";
}
return prefix;
}
string longestCommonPrefix2(string str1, string str2) //构造比较函数
{
int len = min(str1.size(),str2.size());
int index =0;
while(index<len && str1[index]==str2[index])
{
index++;
}
return str1.substr(0,index);
}
};