Skip to content

14. 最长公共前缀

解题过程

INFO

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

javascript
/**
 * @link https://leetcode.cn/problems/longest-common-prefix/
 * @title 14. 最长公共前缀
 * @description 编写一个函数来查找字符串数组中的最长公共前缀。
 * 如果不存在公共前缀,返回空字符串 ""
 * @param {string[]} strs
 * @return {string}
 */
// 解法一
// 思路:拿一个数组一个元素字符当做参考物遍历验证其余字符前缀过滤查找判断数组长度跟原数组长度是否相等关系
// 第一步:拿去数组第一个元素字符串为参考物
// 第二步:遍历第一步拿到的参考物字符串字符
// 第三步:判断当前字符过滤查找是否原数组字符元素都匹配存在,看返回数组长度是否跟原数组长度一致
// 第四步:一致则叠加参考物字符,否则退出循环
var longestCommonPrefix = function (strs) {
  const first = strs[0]
  let res = ''

  for (let i = 0; i < first.length; i++) {
    let curStr = res + first[i]
    const len = strs.filter(str => str.slice(0, i + 1) === curStr)?.length
    if (len === strs.length) {
      res = curStr
    } else {
      break
    }
  }

  return res
}

// 解法二
// 根据解法一优化代码

var longestCommonPrefix = function (strs) {
  const first = strs[0]
  let res = ''

  for (let i = 0; i < first.length; i++) {
    let curStr = res + first[i]
    const len = strs.filter(str => str.startsWith(curStr))?.length
    if (len === strs.length) {
      res = curStr
    } else {
      break
    }
  }

  return res
}

const result = longestCommonPrefix(["flower", "flow", "flight"]) // fl
// const result = longestCommonPrefix(["dog", "racecar", "car"]) // ''
// const result = longestCommonPrefix(["c", "acc", "ccc"]) // ''
console.log(result)

解题感受

感觉没啥技巧,就是拿数组第一个元素当参考物,进行前缀一个一个字符遍历跟原数组前缀进行判断匹配度,用了字符串 API filter/startsWith 跟其他题解感觉思路差不多,知识实现方式有差异

参考题解