最长公共前缀

107 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第35天,点击查看活动详情

题目描述

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

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

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

思路分析

根据题意可知,题目给出一个字符串数组,需要我们在这个字符串数组中找出最长公共前缀,这个前缀在数组中的每个字符串中都会出现,并且都在最前面,而且是最长的那个子字符串。如果这个数组没有公共前缀,那就返回空字符串“”。
声明一个变量result用来存储公共前缀,默认为空字符串。开始循环字符串数组,在这里面,一个循环是不够的,所以这里需要两个循环。第一次循环是循环数组中的第一个字符串,要拿里面的每一个字符和其他字符串的相同的下标字符比对。第二次循环就是循环整个数组strs,每次循环到的当前字符串的字符都会和第一个字符串的相同的下标字符比对;在第二次循环里面比对字符,若是每次比对都是相同的,就将当前字符拼接到result后面,拼接字符串需要在第一次循环里面,若是有一次比对不一致,那么就需要将result返回出去。等到循环结束了,只要有一次字符比对不相同就可以将结果返回出去。

AC代码

function solution(strs) {
    let result = '';
    if(strs.length === 0) {
        return result;
    }
    for(let i=0; i<strs[0].length; i++) {
        for(var j=1; j<strs.length; j++) {
            if(strs[j][i] != strs[0][i]) {
                console.log(result)
                return result;
            }
        }
        result += strs[0][i];
    }
    return result
}
let strs = ["flower","flow","flight"];
solution(strs);