优美编程

Leetcode- 最长公共前缀

2020-01-17  本文已影响0人  小遁哥

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 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"],而在大多数情况下,每次不同都要遍历全部的数组项。

极端的情况下,没有公共前缀就十分尴尬了。

上一篇下一篇

猜你喜欢

热点阅读