前言
最近本人在刷算法题,时常会学到新的知识,所以打算通过优快云记录一下学习的收获。希望这些写的分享也能让大家有收获,另外如果有任何错误的地方,请大家多多指正。
目录
一、最长公共前缀
一下是完整的算法解答:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
bool flag=false;
int j=0;
sort(strs.begin(),strs.end(),[](const string &s1, const string &s2){return s1.length()<s2.length();});
//先确定字母序号,再遍历string,问题是如何确定j退出的判断
for(j=0;j<strs[0].length();++j)
{
for(int i=1;i<strs.size();++i)
{
//如果出现不等于的情况,就直接退出,那么说明截止到这个位置,退出两个循环
//如果遍历后发现相等,那么在遍历结束之后将字母放入字符串中
if(strs[0][j]!=strs[i][j]){
flag=true;
break;
}
//下面这段增加了普通情况的比较次数
//if(j>strs[i].length())flag=true;
}
//如何都相同,那么写入string
if(flag)break;
}
return strs[0].substr(0,j);
}
};
收获:
sort函数有两种格式,分别是:
void sort (RandomAccessIterator first, RandomAccessIterator last);
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
第一种格式只传递了前两个参数,即待排序序列的起始和终止迭代器,这种情况下sort函数默认使用 operator<
比较元素的大小(即依据数值从小到大排序)。
第二种格式传递了一个额外的参数 comp
,表示比较函数,可以自定义排序规则。
void longestCommonPrefix(vector<string>& strs) {
sort(strs.begin(), strs.end(), [](const string& s1, const string& s2) { return s1.length() < s2.length(); });
}
以上的第三个参数是lambda表达式,作为第三个参数传递给sort函数,它用于指定sort函数的排序规则。传入两个参数s1 s2,若返回值为true,则s1排在s2前面,以上代码实现了将strs容器中的字符串依据长度排序(从短到长)。
为什么要使用const 常量型呢?定义成const是为了避免字符串在排序的过程中被修改
实时更新中