#14E 最长公共前缀

题目

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

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

示例 1:

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

示例 2:

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

说明:

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

解法一 列比较

把所有字符串垂直排列,然后一列一列的比较,直到某一个字符串到达结尾或者该列字符不完全相同。

const longestCommonPrefix = function(strs) {
    let result = '';
    if (!strs.length) return result;
    for (let j=0;j<strs[0].length;j++){// 遍历列
        for (let i=1;i<strs.length;i++){// 遍历每一个
            if (strs[i][j]!=strs[0][j]) return result
        }
        result += strs[0][j];
    }
    return result;
};

解法二 两两比较

每次比较的是两个相邻字符串。以第一个字符串为初始值,一旦对应列比较不相等,更新 result 为新的最小共用 str。遍历比较结束后即可得最终结果

  var longestCommonPrefix = function(strs) {
    let result = ''
    if(!strs.length) return result
    // 以第一个字符串为基准
    result = strs[0] 
    for(let i = 0; i < strs.length; i ++){
        // 重点,保存 result 和 strs[i].length 较短那个
        const minLen = Math.min(result.length, strs[i].length)
        let j = 0
        for(j; j < minLen; j++){
            if(result[j] !== strs[i][j]){
                break
            }
        }
        // 保存当前的j strs[i] 为result的最新值
        result = strs[i].substring(0, j)
    }
    return result
}

最后更新于