Leetcode|Leetcode 14 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
【Leetcode|Leetcode 14 最长公共前缀】示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
解题思路 第一种解法是逐个比较,先比较第一和第二个字符串的最长公共前缀,然后再用这个前缀和第三个字符串比较,以此类推。
function longestCommonPrefix(strs) { return strs.reduce((accu, cur) => { let prefix = ""; for (let i = 0; i < accu.length; i++) { if (accu[i] === cur[i]) { prefix += accu[i]; } else { return prefix; } } return prefix; }) }

使用 reduce 如果没有指定初始值,一定要确保数组非空,由于这道题已经说明了 strs 长度大于等于 1 ,所以不用对空值进行处理
时间复杂度: O(s)s 是所有字符串中字符数量的总和
空间复杂度: O(1)
上面这种方法思路很容易想到,但是需要进行大量的遍历操作,时间复杂度较高。第二种方法是仅比较最大、最小字符串的最长公共前缀。这里说的最大、最小指的是 ACSII 编码的先后顺序,例如 ab 小于 abcabc 小于 abcdabcd 小于 ac ,那么最小 ab 与最大 ac 的最长公共前缀一定也是 abcabcd 的公共前缀。
function longestCommonPrefix(strs) { let min = 0, max = 0; for (let i=0; i strs[i]) { // 记录最小字符串下标 min = i; } if (strs[max] < strs[i]) { // 记录最大字符串下标 max = i; } } for (let i=0; i

时间复杂度: O(n+m)n 是数组的长度, m 是字符串数组中最短字符的长度
空间复杂度: O(1)

    推荐阅读