最长公共前缀

2020-10-27  本文已影响0人  422ccfa02512

题目

难度级别:简单

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

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

示例 1:

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

示例 2:

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

说明:

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

解题思路

longestCommonPrefix函数处理传入进来的数组,若数组长度为0,则直接输出""。若传入的数组长度不为0,则将数组的第一位数做为初始返回值,并赋值给变量str,然后对数组从下标1开始进行循环,调用theSameInitials函数对str与当前的字符串进行比较,若循环内部的str为空字符串时,则退出循环。否则,将返回值str与当前的值进行比较前面相同的字母字符串重新赋值给str

const longestCommonPrefix = function(strs) {
    if (strs.length === 0) {
        return ""
    }

    let str = strs[0]

    for (let i = 1; i < strs.length; i++) {
        if (str === "") break
        str = theSameInitials(str,strs[i])
    }

    return str
};

const theSameInitials = function(s,l) {
    let str = ""

    if (s.length > 0 && l.length  > 0) {
        for (let i = 0; i < s.length; i++) {
            if (s[i] !== l[i]) break
            str += s[i]
        }
    }

    return str
}

优化代码

将比较写在strs数组的循环内部,通过比较str与当前数组strs的相同项,str利用字符串substring的方法取前面相同项(不过感觉执行速度上要慢一些,不知道是不是调用了substring这个方法)。

const longestCommonPrefix = function(strs) {
    if (strs.length === 0) {
        return ""
    }

    let str = strs[0]

    for (let i = 1; i < strs.length; i++) {
        if (str === "") break

        if (str.length > 0 && strs[i].length  > 0) {
            let j = 0

            for (; j < str.length; j++) {
                if (str[j] !== strs[i][j]) break
            } 

            str = str.substring(0,j) 
        }else{
            str = ""
            break
        }
    }

    return str
};

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix

上一篇 下一篇

猜你喜欢

热点阅读