Leetcode前端必会系列:最长公共前缀

63 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情

引言

算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。

题目描述

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

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

 

示例 1:

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

示例 2:

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

 

提示:

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

分析

根据题目的分析,我们如何求最长公共前缀的设计?根据题目的要求,我们可以按照如下的方案完成。

  1. 选择最短的一个字符串作为参考的标准
  2. 循环遍历所有的字符串作为比较对象
  3. 依次的判断是否相同,如果不同,直接返回当前的最大前缀
  4. 返回结果。

分析整个设计的过程,整体的时间复杂度是o(n^2),因此设计还是比较简单的。

解答

/**

 * @param {string[]} strs

 * @return {string}

 */

var longestCommonPrefix = function(strs) {

   let res = ""

  let i,j

  let min = Number.MAX_VALUE

  if(strs.length===1) return strs[0]

  for(i=0;i<strs.length;i++){

    min = Math.min(min,strs[i].length)

  }

  for(i=0;i<min;i++) {

    let tmp = strs[0][i]

    for(j=1;j<strs.length;j++){

      if(tmp!==strs[j][i]) {

        if(!res) return ""

        return res

      }

    }

    res += tmp

  }

  return res

};

代码需要注意的点只要是,选择其中最短的字符串作为参考的标准设计,然后其它字符串按照这个去对比完成就可了。

总结

最长公共前缀本质的设计就是贪心的思想,只要仔细分析就可以轻松的完成题目。