【算法】字符串:最长公共前缀 |【掘金日新计划·12月更文挑战】

67 阅读1分钟

题目:最长公共前缀

leetcode链接:最长公共前缀

说明:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""

理解:

1、有一个字符串数组,找出字符串数组中各个元素共同的连续字符(公共前缀)

2、若数组元素不存在公共的前缀则返回字符串 ""

思路:

1、indexOf: 先取第一个字符串当做他们的公共前缀,然后找出他和第2个字符串的公共前缀,然后再用这个找出的公共前缀分别和第3个,第4个,第n个进行判断。

2、startsWith

3、reduce API

题解:

方案一:indexOf

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    //边界条件判断
    if (strs == null || !strs.length) return "";
    //默认第一个字符串是他们的公共前缀
    let pre = strs[0];
    let i = 1;
    while (i < strs.length) {
        //不断的截取
        while (strs[i].indexOf(pre) != 0) {
            pre = pre.substring(0, pre.length - 1);
        }
        i++;
    }
    return pre;
};

image.png

方案二:startsWith

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    let pre = strs[0];
    for (let str of strs) {
        while (!str.startsWith(pre)) {
            pre = pre.substring(0, pre.length - 1);
            if (!pre) {
                return pre;
            }
        }
    }
    return pre;
};

image.png

方案三:reduce Api

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    return strs.reduce((prefix,cur) => {
        while(cur.indexOf(prefix) != 0){
            prefix = prefix.slice(0, prefix.length-1) 
        }
        return prefix
    })
};

image.png

总结:

本篇提供了几种对最长公共前缀的实现,从执行结果来看,效率看着还行~