描述
给你一个大小为 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,
};