【中等】算法:最长公共前缀

118 阅读1分钟

最长公共前缀

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情

14. 最长公共前缀

算题

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

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

示例 1:

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

示例 2:

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

提示:

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

解析

最长公共前缀指的是在所有字符串中从第一个字符开始,找到最长的公共字符串。那么可以理解为,实际上就是求所有字符串中从第一个字符开始,相同的子字符串。

思路

非常简单的一个思路,即判断从第一个字符串开始,最长的相等字符串。使用公共下标0开始,开始遍历每一个字符串,并且判断是否相等,直至出现不等时,那么前面相等的内容即为最长公公前缀。

注意: 遍历最大长度为最短字符串长度

图解

通过一张动图来了解一下实现求的最长公公前缀的过程。
1.gif

最终 Res 即为最长公共前缀

代码

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function (strs) {
  let res = '' // 结果
  let min = Math.min(...strs.map(item => item.length)) // 最短字符串长度
  for (let index = 0; index < min; index++) {
    let char = strs[0][index] // 公共字符
    if (strs.every(item => item[index] === char)) { // 利用js api 判断当前字符是否为公共字符
      res += char
    } else {
      break
    }
  }
  return res
};

最后附上提交结果:

image.png

该类型的题目表叫简单,过程不需要过多赘述。