14.最长公共前缀(面试题)

85 阅读1分钟

每日刷题第2天 2021.12.27

14.最长公共前缀

  • 难度:简单

题目

  • 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""

示例

输入: strs = ["flower","flow","flight"]
输出: "fl"
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

分析

  • 选择字符串数组中的第一个元素strs[0],当作比较对象。数组剩下的元素的每一项依次与strs[0]的每一项进行比较,相同则记录下来,不同就break

解法

var longestCommonPrefix = function(strs) {
  // 如果传入的数组为空
    if (strs.length == 0) {
        return '';
    }
    let ans = '';
    // 取出数组中的第一个字符串
    let [a,...b] = strs;
    // console.log(a,b);
    for (let i = 0; i < a.length; i++) {
        // 定义一个标志
        // console.log('循环',a[i]);
        let flag = b.every((item) => { return item[i] == a[i] });
        // 判断标记真,给结果加
        if (flag){
            ans += a[i];
            // console.log('a', a[i]);
        } 
        else break;
    }
    return ans;
};

附录

  • 数组的every()方法:测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。

    • every 方法为数组中的每个元素执行一次 callback 函数,直到它找到一个会使 callback 返回 falsy 的元素。如果发现了一个这样的元素,every 方法将会立即返回 false。否则,callback 为每一个元素返回 trueevery 就会返回 true
  • 箭头函数的书写格式(!这次写题出错的地方!

// 表达式expression,加了{}花括号,就一定要写return
(param1, param2, …, paramN) => expression
//相当于:(param1, param2, …, paramN) =>{ return expression; }
  • 记:第一次面试视频,手撕算法,思路不是很清晰,安静不下来,后续再接再厉!