最长公共前缀

41 阅读1分钟

描述

给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。

示例1

输入:

["abca","abc","abca","abc","abcc"]

返回值:

"abc"

示例2

输入:

["abc"]

返回值:

"abc"

既然是公共前缀,那我们可以用一个字符串与其他字符串进行比较,从第一个字符开始,逐位比较,找到最长公共子串。

具体做法:

  • step 1:处理数组为空的特殊情况。
  • step 2:因为最长公共前缀的长度不会超过任何一个字符串的长度,因此我们逐位就以第一个字符串为标杆,遍历第一个字符串的所有位置,取出字符。
  • step 3:遍历数组中后续字符串,依次比较其他字符串中相应位置是否为刚刚取出的字符,如果是,循环继续,继续查找,如果不是或者长度不足,说明从第i位开始不同,前面的都是公共前缀。
  • step 4:如果遍历结束都相同,最长公共前缀最多为第一个字符串。
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param strs string字符串一维数组
 * @return string字符串
 */
function longestCommonPrefix(strs) {
    if (strs.length === 0) {
        return "";
    }
    if (strs.length === 1) {
        return strs[0];
    }
    let str = strs[0];
    let maxCommonStr = "";
    let commonStr = "";
    for (let i = 0; i < str.length; i++) {
        commonStr += str[i]; // 从头开始拼接公共前缀
        let isCommon = strs.every((item) => item.includes(commonStr));
        if (isCommon) {
            if (commonStr.length > maxCommonStr.length) {
                maxCommonStr = commonStr;
            }
            continue;
        } else {
            commonStr = ""; //
            break;
        }
    }
    return maxCommonStr;
}
module.exports = {
    longestCommonPrefix: longestCommonPrefix,
};