【力扣】14. 最长公共前缀

204 阅读1分钟

题目

image.png

一、题目分析

  • 【公共】“公共”前缀,就是所有字符串里都要含有。
  • 【最长】最长公共前缀,那么反过来就是要判断最短的那个字符串是否在所有字符串中都有,没有直接返回“”,因为没有“公共”前缀

二、开始解题

1、对传入strs数组进行按长度排序。

2、最短的字符串进行遍历寻找最长前缀。

3、遍历中一但发现无法找到公共前缀则结束遍历,减少遍历次数。

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if (!strs || strs.length < 1) return "";
    let sortStrs = strs.sort((a, b) => a.length - b.length);
    let pStr = '';
    let minStr = sortStrs[0];
    for (let i=1;i<=minStr.length;i++) {
        let checkStr = minStr.substr(0, i);
        let filterArr = sortStrs.filter(str=> str.indexOf(checkStr) === 0 );
        if (filterArr.length === sortStrs.length) {
            pStr = checkStr;
        } else {
            break
        }
    }
    return pStr;
};

image.png

换个遍历写法~~

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if (!strs || strs.length < 1) return "";
    if (strs.length < 2) return strs[0];
    let sortStrs = strs.sort((a, b) => a.length - b.length);
    let pStr = '';
    let minStr = sortStrs[0];
    let len = 1;
    while (len <= minStr.length) {
        let checkStr = minStr.substr(0, len);
        let filterArr = sortStrs.filter(str=> str.indexOf(checkStr) === 0 );
        if (filterArr.length === sortStrs.length) {
            pStr = checkStr;
        } else {
            break
        }
        len++;
    }
    return pStr;
};

image.png

三、最后

题目地址

未完待续~~~