咸鱼学算法No.1-14.最长公共前缀

112 阅读2分钟

众所周知,我是一条大咸鱼,刚开始接触算法,其实这是刷的第5道题了(刷的都是easy难度的 T.T),进展缓慢
这题我是参考了leetcode上赞比较高的一个解,之前也有自己想的暴力解,但是看到这么一句话:算法如果使用暴力解,那将毫无意义;

一、题目描述

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

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

示例2

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

提示:

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

二、解题思路

我来复述一下解题思路

  1. 选取数组的第一个值array[0]作为参考
  2. 将它与下一个值做循环比较
  3. 当比对到发现不一致时,跳当前这个对比循环
  4. 截取相同部分,进入下一次循环,重复2~4

三、代码

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function (strs) {
  // 选择第一个值为参照
  let result = strs[0];
  for (let i = 1; i < strs.length; i++) {
    // 记录点位
    let j = 0;
    // 用当前值的每一个字符与strs的值字符 做对比
    for (; j < result.length && strs[i].length; j++) {
      // 当字符不一致是结束循环
      if (result[j] != strs[i][j]) {
        break;
      }
    }
    // 更新结果 选取0-j 之间的字符
    result = result.substr(0, j);
    // 当j为0时 既没有相同的字符 结束循环
    if (result == '') return result;
  }
  return result
};

四、反思一下(大白话时间)

算法这东西,没接触过是真没想法,觉得前期还得是多看多学,多看看优质解,学习一下思路,上面这题算简单的,没啥好说的,关键是思路,官方还有二分法,这个我觉得不错,一会吸收过来,之前听人讲了可以用二分法解决,但是思考了半天没想明白怎么操作;

嗐,多看看吧,慢慢积累争取早日把easy都过一遍。T.T