题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
解答:
之前在面试百度测试实习生的时候,被问过类似的问题。
基本思想是先计算字符串数组的个数,然后遍历每一个数组元素,找到长度最小的那个,作为外层循环,然后将数组中的元素个数作为内层循环,逐个比较相同的位置字符是否一样。
以这个思想写出的代码如下:
string longestCommonPrefix(vector<string>& strs) {
int min=0; //计算数组中所有元素长度的最小值
string temp=""; //存放匹配到的公共前缀的每一个字符
string res=""; //返回的答案
int flag=0; //判断是否有公共前缀的标志位
if(strs.size()==0)
return res; //长度为零时,返回空
else if(strs.size()==1)
return strs[0]; //数组长度为1时,返回该字符
else{
min=strs[0].size();
for(int i=0;i<strs.size();i++){
if(strs[i].size()<min)
min=strs[i].size(); //获取到数组中元素长度最小值
}
for(int j=0;j<min;j++){ //最小值作为外层循环
for(int i=1;i<strs.size();i++){ //数组元素个数作为内层循环
if(strs[i-1][j]==strs[i][j]) //将相邻两个元素的每一位字符进行对比
{
temp=strs[i][j]; //相同的字符将其记录在临时变量中
}
else
flag=1; //一旦出现不相同的字符,标志位变成1
}
if(flag==0)
res=res+temp; //将temp中的值追加到res中
else
break;
}
return res; //输出最后答案
}
}
};