每天学习一点算法 2025/12/08
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""。
-
公共前缀长度肯定是小于最短字符串的,所以我这里先根据字符串长度做了一个排序,找到并遍历最短的字符串,然后跟其他字符串做对比,这样就能得出最长的公共前缀。
function longestCommonPrefix(strs: string[]): string { if (strs.length === 0) return '' strs.sort((a, b) => a.length - b.length) for(let i = 0; i < strs[0].length; i++) { for (let j = 1; j < strs.length; j++) { if (strs[j][i] !== strs[0][i]) return strs[0].slice(0, i) } } return strs[0] }; -
上面两种方法其实是一种纵向对比的方法,我们还可以横向对比,遍历数组提取公共前缀,直至遍历完成或者公共前缀为空字符串。
这里我先写了一个获取公共前缀的方法
function getCommonPrefix(str1: string, str2: string) { let prefix = '' const len = Math.min(str1.length, str2.length) let index = 0 while (index < len && str1[index] === str2[index]) { prefix += str1[index] index++ } return prefix }function longestCommonPrefix(strs: string[]): string { if (strs.length === 0) return '' let res = strs[0] for (let i = 1; i < strs.length; i++) { const prefix = getCommonPrefix(res, strs[i]) if (prefix !== '') { res = prefix } else { return '' } } return res } -
这里还有一种骚操作就是对字符串数组按字符串进行排序,这里排序的比较时就会默认比较字符串的每一位,我们直接比较排序后数组的第一位和最后一位即可获取到最长公共前缀。
function longestCommonPrefix(strs: string[]): string { if (strs.length === 0) return '' strs.sort() return getCommonPrefix(strs[0], strs[strs.length -1]) }
题目来源:力扣(LeetCode)
276

被折叠的 条评论
为什么被折叠?



