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 @ 2022-11-14 14:50  SdoYeji  阅读(75)  评论(0)    收藏  举报