横向扫描
初始化最长公共前缀 result 的值为数组第一个字符串
遍历后面的字符串,依次将其与 result 进行比较,两两找出公共前缀,遇到字符不同结束遍历即可
通过 k 记录当前遍历到的相同下标,然后直接重新赋值即可 result = result.slice(0, k)
时间复杂度:O(mn),其中 m 是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。
边界条件
当字符串数组长度为 0 时则公共前缀为空,直接返回
时间上的优化,可以通过 nowLength = result.length 存储当前记录的公共前缀长度,后面 while 循环时就可以用这个存储的变量作为边界条件约束 k
遍历后面的字符串,依次将其与 result 进行比较,两两找出公共前缀,遇到字符不同结束遍历即可
通过 k 记录当前遍历到的相同下标,然后直接重新赋值即可 result = result.slice(0, k)
时间复杂度:O(mn),其中 m 是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。
边界条件
当字符串数组长度为 0 时则公共前缀为空,直接返回
时间上的优化,可以通过 nowLength = result.length 存储当前记录的公共前缀长度,后面 while 循环时就可以用这个存储的变量作为边界条件约束 k
/** * * @param strs string字符串一维数组 * @return string字符串 */ function longestCommonPrefix( strs ) { // write code here let len = strs.length, res, k; if(!len)return ''; res = strs[0];// 最长公共前缀初始化为第一个字符串 for(let i = 0;i < len;i++){ k = 0;// 当前遍历到的下标,即将公共前缀长度初始化为0 while(k < res.length && res[k]===strs[i][k]){// 直到遍历到第一个不是公共前缀的位置 k++; } res = res.slice(0,k); } return res; } module.exports = { longestCommonPrefix : longestCommonPrefix };