题目:
不用内置函数解题(c++)
解题步骤:
1.寻找其中最短的字符串,记录其长度
2.按列遍历,当出现不相等标记该列
3.根据标记更新res字符串,最后返回它便是答案
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==0)return "";
//min用于求这里面最短的字符串。
int min = strs[0].size();
string res = "";
//flag用于标记从哪一列开始不相等了。
int flag = 0;
for(int i=0;i<strs.size();i++){
if(strs[i].size()<min){
min = strs[i].size();
}
}
int k=0;
for(;k<min;k++){
for(int j=1;j<strs.size();j++){
if(strs[j][k]!=strs[j-1][k]){
//goto语句的应用防止之后仍不断遍历,毕竟有两层循环不能用break,当然也可根据设置标签用两个break
flag = k;
goto end;
}
}
}
end:
for(int q=0;q<k;q++){
res.push_back(strs[0][q]);
}
return res;
}
};
使用内置函数简化代码
1.相比上一段,利用排序将string数组按照长度从小到大的顺序排列。
2.使用了substr方法对结果进行返回
class Solution {
public:
static bool compare(const string &a, const string &b){
return a.size()<b.size();
}
string longestCommonPrefix(vector<string>& strs) {
sort(strs.begin(), strs.end(),compare);
if(strs.size()==0 || strs[0].size()==0 ){
return "";
}
for(int i=0;i<strs[0].size();i++){
for(int j=1;j<strs.size();j++){
if(strs[j][i]!=strs[j-1][i]){
return strs[0].substr(0,i);
}
}
}
return strs[0];
}
};
效率比较
用leetcodeOJ平台,两者几乎完成时间没有任何区别。。。