Leecode刷题热题HOT100(14)——最长公共前缀

📋 前言

  • 🖱 博客主页:在下马农的碎碎念
  • 🤗 欢迎关注🔎点赞👍收藏⭐️留言📝
  • ✍ 本文由在下马农原创,首发于CSDN
  • 📆 首发时间:2021/12/25
  • 📅 最近更新时间:2021/12/25
  • 🤵 此马非凡马,房星本是星。向前敲瘦骨,犹自带铜声。
  • 📇 系列文章目录: 快点我呀,我是目录
  • 🙏作者水平有限,如发现错误,请留言轰炸哦!万分感谢!

请添加图片描述

以下是正文

🍅 题目

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

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

示例 1:

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

示例 2:

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

提示:

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

🍅 解题思路

🍏方法一

辅助方法:求两个字符串的最长公共前缀
首先定义一个辅助方法,作用是求出两个字符串的最长公共前缀,思路是从i=0开始,比较字符串s1[i]与s2[i]是否相同,如果相同,则公共前缀result追加s1[i],碰到s1[i]不等于s2[i]时退出循环,若i=min(s1.size(),s2.size()),即有一个字符串被遍历到最后一个字符时,结束循环。
字符串数组两两求最长公共前缀,得到的结果作为新的字符数组再两两求最长公共前缀,直到得到的新的字符数组只有一个元素,即所有元素最长公共前缀
在这里插入图片描述

保持身体健康的唯一办法,就是吃点你不想吃的,喝点你不想喝的,以及做点你不愿做的事情。——马克·吐温

在这里插入图片描述

🍅 我的答案

class Solution {
public:
    string longestCommonPrefixBetweenTwo(string &s1,string &s2){
        int len = s1.size()>s2.size()?s2.size():s1.size();
        string result = "";
        for(int i = 0;i<len;i++) {
            if(s1[i] == s2[i]){
                result+=s1[i];
            } else {
                break;
            }
        }
        return result;
    } 
    string longestCommonPrefix(vector<string>& strs) {
        int len = strs.size();
        while(len!=1) {
            int i = 0;
            for(i=0;i<strs.size()-1;i+=2){
                strs[i/2] = longestCommonPrefixBetweenTwo(strs[i],strs[i+1]);
            }
            if(len%2!=0) {
                strs[len/2] = strs[len-1];
                len = len +1;
            }
            len = len / 2;
        }
        return strs[0];
    }
};

🍅 优质解答

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (!strs.size()) {
            return "";
        }
        string prefix = strs[0];
        int count = strs.size();
        for (int i = 1; i < count; ++i) {
            prefix = longestCommonPrefix(prefix, strs[i]);
            if (!prefix.size()) {
                break;
            }
        }
        return prefix;
    }

    string longestCommonPrefix(const string& str1, const string& str2) {
        int length = min(str1.size(), str2.size());
        int index = 0;
        while (index < length && str1[index] == str2[index]) {
            ++index;
        }
        return str1.substr(0, index);
    }
};

🍅 知识积累


在这里插入图片描述

随手点赞👍一次,运气增加一分哦🙏🙏🙏


注:本文中题目信息及优质解答来自力扣网

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下马农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值