✨查找公共前缀 算法

28 篇文章 0 订阅
15 篇文章 0 订阅

**话不多说,直接上题目 **

编写一个函数来查找字符串数组中的最长公共前缀, 如果不存在公共前缀,返回空字符串 “”。

示例 1:

输入:strs = [“flower”,“flow”,“flight”]

输出:“fl”

示例 2:

输入:strs = [“dog”,“racecar”,“car”]

输出:""

解释:输入不存在公共前缀。

解题思路:找出公共部分需要遍历每一项去比对,我想到的是需要去用到双层循环,取出第一个,把第一个与后面的比对,找到相同,就截取到相同的部分,直至结束。

(虽然是解出来了,但是消耗了内存挺多的,也不是最优方法)

const longestCommonPrefix = function(strs) {
   if (strs) {
       // 拿到数组中的第一个
       let str = strs[0];
       // 然后遍历除第一个之外
       for (let i = 1; i < strs.length; i++) {
           for (var j = 0; j < strs[i].length; j++) {
               if (strs[i][j] !== str[j]) {
                   break;
               }
           }
           str = str.slice(0, j);
           if(!str){
               return '';
           }
       }
       return str;
   }else{
       return '';
   }
};

如果有更好的解法,可以评论区告诉我,我去学习,嘻嘻(●’◡’●)

如果对你有帮助的话,麻烦一键三连,关注一手 感谢感谢(抱拳致谢)
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
最长公共前缀(Longest Common Prefix,简称LCP)是指在一组字符串中,所有字符串共有的、最长的前缀子串。 C++实现LCP的一种简单方法是使用字符数组,遍历字符串数组中的每个字符串的每个字符,直到出现不同的字符或到达某个字符串的结尾。代码如下: ```c++ #include <iostream> #include <string> #include <vector> using namespace std; string longestCommonPrefix(vector<string>& strs) { if (strs.empty()) { return ""; } int n = strs.size(); int len = strs[0].size(); for (int i = 0; i < len; i++) { char c = strs[0][i]; for (int j = 1; j < n; j++) { if (strs[j][i] != c || i == strs[j].size()) { return strs[0].substr(0, i); } } } return strs[0]; } int main() { vector<string> strs = {"flower", "flow", "flight"}; string lcp = longestCommonPrefix(strs); cout << "Longest Common Prefix: " << lcp << endl; return 0; } ``` 在这个示例中,我们使用了一个字符串数组`strs`来存储所有的字符串。然后我们定义一个函数`longestCommonPrefix`来计算最长公共前缀。如果字符串数组为空,我们直接返回一个空字符串。接着,我们遍历第一个字符串中的每个字符。对于每个字符,我们检查所有其他字符串在该位置上是否与它相同。如果有任何一个字符串在该位置上与第一个字符串不同,或者该字符串已经到达了某个字符串的结尾,我们就返回第一个字符串的前缀子串。如果我们遍历完了第一个字符串,那么第一个字符串就是所有字符串的最长公共前缀。 在这个示例中,我们使用了`substr`函数来截取字符串的前缀子串。如果最长公共前缀为空字符串,该函数会返回一个空字符串。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小朋友120

谢谢你拉近我与星星的距离

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

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

打赏作者

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

抵扣说明:

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

余额充值