题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”
示例
示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z
解析
Method Me
var getMaxLenPubPrefix = function (arr) {arr = arr.sort((a, b) => a.length - b.length)const minLenStr = arr.splice(0, 1)[0]let maxLenPrefix = ''for (let i = 0, iLen = minLenStr.length; i < iLen; i++) {const currChat = minLenStr[i]const currChatEqual = arr.every(item => item[i] === currChat)if (currChatEqual) {maxLenPrefix += currChat} else {break}}return maxLenPrefix}
Method
思路分析:
实现方法一:双层for循环
逐位比较,比较全部通过时re增加当前字符,不通过时直接返回re。
实现方法二:for循环+正则
re初始化为数组中第一个元素,逐个比较,当比较通过时返回re,否则削去末位直至比较通过
var longestCommonPrefix = function(strs) {var re = '';if (!strs.length) return re;for (var j=0;j<strs[0].length;j++){//第j位for (var i=1;i<strs.length;i++){//第i个if (strs[i][j]!=strs[0][j]) return re}re += strs[0][j];}return re;};var longestCommonPrefix = function(strs) {var re = strs[0] ? strs[0]:'';for (var i=1;i<strs.length;i++){var regex = new RegExp('^'+re);while (!regex.test(strs[i])&&re.length){re = re.slice(0,re.length-1);regex = new RegExp('^'+re);}}return re;};
