这段查找最长公共前缀的JavaScript代码工作原理是什么?
最长公共前缀函数的疑问解答
先看你给出的这段查找最长公共前缀的JavaScript代码:
var longestCommonPrefix = function(strs) { // 排序数组,按字典序重新排列 strs.sort(); for (let i = 0; i < strs[0].length; i++) { if (strs[0][i] !== strs[strs.length - 1][i]){ return strs[0].substr(0, i); } } return strs[0]; };
你疑惑为什么只比较数组第一个和最后一个元素就能覆盖整个数组的情况,核心原因就在strs.sort()这一步——数组按字典序排序后,字典序最小的元素和最大的元素的公共前缀,就是整个数组所有元素的公共前缀。
举个例子:假设数组是["flower","flow","flight"],排序后会变成["flight","flow","flower"]。首尾元素"flight"和"flower"的公共前缀是"fl",而中间的"flow"也包含这个前缀,所以整个数组的最长公共前缀就是"fl"。
再换个极端情况:如果数组里有元素完全没有公共前缀,比如["dog","racecar","car"],排序后是["car","dog","racecar"],首尾第一个字符就不同,直接返回空字符串,这也符合结果。
具体逻辑拆解:
- 排序后,数组中间的所有元素,字典序都介于首尾元素之间。也就是说,中间元素和首元素的公共前缀长度,不会短于首尾元素的公共前缀长度。
- 只要首尾元素在第
i位字符不同,那所有元素的公共前缀最多到i-1位;如果首尾元素所有字符都匹配,说明首元素就是所有元素的公共前缀,直接返回即可。
内容的提问来源于stack exchange,提问作者Alaa Ali
相关产品推荐
相关产品推荐

