最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string ans = "",smallstr = "";
int small = 100000,index = 0,num = 0,last = 0;
if(strs.empty()){
return "";
}
if(strs.size()==1){ //如果只有一个字符串 则返回它本身
return strs[0];
}
for(int i = 0;i < strs.size();i++){
if(strs[i].size()==0){ //有为空的字符串时
return "";
}
if(strs[i].size() < small){ //找出最短字符串(最长公共前缀必不长于smallstr)
small = strs[i].size();
smallstr = strs[i];
index = i;
}
}
strs.erase(strs.begin()+index);
for(int i = 0;i < strs.size();i++){
last = num;
num = 0;
for(int j = 0;j < strs[i].size();j++){
if(strs[i][j] == smallstr[j]){
num++;
}
else{
break;
}
}
if(strs.size()==1){ //如果取出最短字符串后 只剩一个字符串 则last必为零 strs[index].substr(0,min(num,last))则必得到空串
last = num;
}
}
ans = strs[index].substr(0,min(num,last));
return ans;
}
};