C++中sort函数、1.4最长公共子串

sort()即为用来排序的函数,它根据具体情况使用不同的排序方法,效率较高。
sort在实现时避免了经典快速排序中可能出现的会导致实际复杂度退化到O(n2)的极端情况。

使用sort()需要头文件

#include<algorithm>

格式如下

sort( 元素首地址 , 元素末地址 , 比较函数(非必填) )

不填比较函数时默认为从小到大进行排序,填入cmd时为从大到小排序

注:结构体数组排序时,必须加入cmp来排序规则,也可以将格式写为

复制代码
struct number
{
    int x,y;
};

bool cmp(number a,number b)
{
    return a.x>b.x;
}
复制代码

 

接下来在最长公共前缀这道题中我们使用sort来实现

 

1.4最长公共前缀

  编写一个函数来查找字符串数组中的最长公共前缀。

  如果不存在公共前缀,返回空字符串 ""

 示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

 提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

 

先使用sort函数对strs字符数组的元素进行从小到大排序,将元素中字母个数最少的放在前面。首先对字母个数最少的单词进行遍历,定义一个char型中间变量,每次循环对其进行赋值后嵌套循环对strs中的其他元素进行比对

复制代码
class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        string answer_0 = "";
        if(strs.size() == 0) 
        return answer_0;
        sort(strs.begin(),strs.end());
        for(int i=0;i<strs[0].size();i++)
        {
            char temp = strs[0][i];
            int j;
            for(j=1;j<strs.size();j++)
            {
                if(temp != strs[j][i])
                break;       
            }
            if(j >= strs.size())
            answer_0 += temp;
            else break;
        }
        return answer_0;
    }
};
复制代码

看了不少别人的解法,还是感慨自己要走的路还很远。

 

 

 

posted @   SdoYeji  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示