题目
一、题目分析
- 【公共】“公共”前缀,就是所有字符串里都要含有。
- 【最长】最长公共前缀,那么反过来就是要判断最短的那个字符串是否在所有字符串中都有,没有直接返回“”,因为没有“公共”前缀
二、开始解题
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;
};
换个遍历写法~~
/**
* @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;
};
三、最后
未完待续~~~