题目
编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串
""
。
输入: strs = ["flower","flow","flight"] 输出: "fl" 输入: strs = ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
题解
我们在函数中先判断出参
strs
的数据长度,如果长度为0
,则直接返回空字符串,否则就往下执行,声明一个变量arr
,我们使用数组中的map
方法将出参strs
的所有数据长度返回出来并直接赋值给arr,在声明一个变量strsLength
,我们这里需要使用到Math
数学对象上的min
方法,我们将arr
数组解构出来后传递进去,这样就能获取到了最小数据长度,然后把最小数据长度赋值给strsLength
变量,在对出参strs
使用find
方法,拿出参strs
中的每个值的长度和strLength
变量进行对比,将查找到符合条件的值赋值给新声明的变量minStr
,这样就找到了最小字符串,然后进行循环,当minStr
有长度的情况下就一直进行循环,在循环中声明一个flag
变量,对出参strs
使用every
方法,在every
方法中设定条件,如果出参strs
每项都通过indexOf
方法查找minStr
变量的值返回的索引都是0
则为true
,否则就为false
,我们将返回的值赋值给flag
变量,然后使用if
语句进行判断当前的flag
变量是否为true
,如果为true
则直接返回minStr
变量,否则就对minStr
变量使用slice
方法删除最后一个字符,并重新赋值给minStr
变量,如果当循环结束还没有返回minStr
变量,则直接返回空字符串
/** * @param {string[]} strs * @return {string} */ var longestCommonPrefix = function(strs) { if(strs.length==0){ return ''; } let arr =strs.map(item => item.length); let strsLength = Math.min(...arr); let minStr = strs.find(item => item.length === strsLength); while (minStr.length) { let flag=strs.every(item => item.indexOf(minStr) === 0) if (flag) { return minStr; }else{ minStr = minStr.slice(0, -1); } } return ''; };
坚持努力,无惧未来!