前端Leetcode系列|14. 最长公共前缀

794 阅读2分钟

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

这是力扣系列第2篇,今天来和小伙伴们一起打卡力扣第14题:最长公共前缀。

一、题目描述

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

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

示例 1:

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

示例 2:

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

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/lo… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析

拿到这个题目,我们应该考虑循环遍历其中一个与其他字符串的相同位的项是否相等。

如果传入数组为空,则直接返回空字符串;若不为空,我们则可以取数组第一项为基准前缀,来依次与后面的项进行对比。

我们可以先使用数组的shift方法,取出第一项,这样剩余的数组中就不会包含这一项了。然后使用从i=0开始for循环来依次遍历剩余项。这个for循环中继续嵌套一层从j=0开始的for循环,内层循环的循环条件为:j < 基准前缀的长度 && j < 当前项的长度

内层循环中拿每一项的第j位于基准前缀的第j位进行对比,如果不同,则代表匹配失败了,拿到现在的j,将基准前缀使用字符串substr方法进行截取,截取后的字符串即为传入数组的最长公共前缀了。

三、JavaScript实现代码

/**
 * @param {string[]} strs 
 * @return {string}
 */
var longestCommonPrefix = function (strs) {
    if (strs.length === 0) return '';
    let prefix = strs.shift();
    for (let i = 0; i < strs.length; i++) {
        const cur = strs[i];
        let j = 0;
        for (; j < prefix.length && j < cur.length; j++) {
            if (prefix[j] !== cur[j]) {
                break;
            }
        }
        prefix = prefix.substr(0, j);
    }
    return prefix;
};

四、总结

前端漫漫长途,我们都在路上,希望可以和小伙伴们一起交流,一起进步。持续更新ing.....

前往Leetcode专栏系列文章,查看解锁更多内容。