codecamp

字符串处理 最长公共前缀

题目

难度 :简单

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

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

示例 1:

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

示例 2:

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

说明:

所有输入只包含小写字母 a-z 。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-common-prefix

解析一、首先是强硬的一一比对

func longestCommonPrefix(strs []string) string {


    if len(strs) == 0 {
        return ""
    }
    for i := 0; i < len(strs[0]); i++ {
        for j := 1; j < len(strs); j++ {
            if i == len(strs[j]) || strs[j][i] != strs[0][i] {
                return strs[0][:i]
            }
        }
    }
    return strs[0]
}

解析二、分步

先找出数组中字典序最小和最大的字符串,最长公共前缀即为这两个字符串的公共前缀

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
         if(strs.empty()) return "";
        // c++17 结构化绑定
        // str0, str1 分别是一个 pair<string, string> 的 first 和 second
        const auto [str0, str1] = minmax_element(strs.begin(), strs.end(),
        [](const string& str0, const string& str1){return str0 < str1;});//赋予最大最小值
        for(int i = 0; i < str0->size(); ++i)
            if(str0->at(i) != str1->at(i)) return str0->substr(0, i);//截取字符串
        return *str0;
    }


};

1.minmax_element()函数

接受一个序列的区间作为参数,查找其中第一次出现的最大最小值,并以std::pair的形式返回其迭代器(注意不是值,也不是tuple)。

vector<int>v ={633,90,67,83,2,100};
auto X一minmax_element(v.begin(),v.end());
cout<<int>"min<<*x.first << endl;
cout<<"max<<*x.second <<endl;

程序的运行结果如下:

min:2
max:633

minmax_element()的使用风格与标准库的算法是一致的,需要注意的就是它的返回值,一个迭代器的pair,因此必须用first和second来访问指向最小最大值的迭代器,并用解引用操作符“*”来获取值。

哈希表 快乐数
字符串处理 合并两个有序链表
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

趣味题

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }