编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
1. 解法
var longestCommonPrefix = function(strs) {
let prefix = "";
function able(index) {
let char = strs[0][index] || "";
let isDifference = strs.some(item => {
let isSame = item[index] === char;
return !isSame;
});
if (!isDifference) {
prefix += char;
able(++index);
}
}
if (strs.length > 0) {
able(0);
}
return prefix;
};
从短到长
从一个字符逐渐累计,计算出最终的公共前缀,这样能够再一次遍历中发现不是公共字符时及时停止,退出递归。
从长到短
看到一种直接拿数组第一项去比较的,发现不匹配则移除最后一个字符,直到所有的数组项都包含,或者返回空字符串。
这种解法只在特定的情况下要好于第一种,比如["flow","flowe","flowed"]
,而在大多数情况下,每次不同都要遍历全部的数组项。
极端的情况下,没有公共前缀就十分尴尬了。
网友评论