欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Leetcode】【简单】【14最长公共前缀】【JavaScript】

程序员文章站 2022-07-01 23:26:51
题目 14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 示例 2: 说明: 所有输入只包含小写字母 a-z 。 解答 误区1:刚开始考虑了先数组元素遍历,然后再元素(字符串)从头到尾比较,但实际上要先以第一个元素strs[0] ......

题目

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

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

示例 1:

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

示例 2:

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

说明:

所有输入只包含小写字母 a-z 。

解答

误区1:刚开始考虑了先数组元素遍历,然后再元素(字符串)从头到尾比较,但实际上要先以第一个元素strs[0]为基准。

漏洞1:没有考虑strs元素为空字符串的情况,如[""],未考虑连续元素都相等的情况如["c","c"],结果这些在提交时都是要判断的。

解答:两层for循环

1、若传入为空数组[]或空字符串[""]则直接返回空字符串;

2、取传入数组的第一个元素为基准字符串,并声明common数组,用于存放公共前缀;

3、第一层i循环(可以想像指针指向strs[0],且从strs[0][0]往str[0][1、2、3…]移动)第二层j循环(可以想像指针指向strs[1],且从strs[1]往str[2、3…]移动),即题中"flower"中的"f",与"flow"中的"f"相比较;

4、相同则j自增,即"flower"中的"f"继续与"flight"中的"f"比较;

5、若j循环未彻底完成,即说明当前的str[i]已经不是公共前缀了,就可以返回common了;若此次j循环彻底完成,则将当前的str[i],push进common;

6、外层的i循环结束后,若未触发过j循环内的return的话,类似["a","a","a"]["ab","abc","abcd"]等等情况的,直接返回strs[0],即str即可。

代码如下:(已在leetcode提交通过,执行用时104ms)

var longestcommonprefix = function(strs) {
    if (strs.length===0 ||strs[0].length===0){return "";}      
    var str=strs[0],                                
        common=[];                                  
    for(let i=0,len1=str.length;i<len1;i++){        
        for(let j=1,len2=strs.length;j<len2;j++){   
            if(str[i]!==strs[j][i]){                 
                return common.join("");
            }
        }
        common.push(str[i]);
    }return str;
};

 两层循环示意图如下:

(目前上传至优酷的视频在审核中)