美文网首页优美编程
Leetcode- 最长公共前缀

Leetcode- 最长公共前缀

作者: 小遁哥 | 来源:发表于2020-01-17 15:02 被阅读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"],而在大多数情况下,每次不同都要遍历全部的数组项。

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

    相关文章

      网友评论

        本文标题:Leetcode- 最长公共前缀

        本文链接:https://www.haomeiwen.com/subject/vgiczctx.html