最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
-基本上每一步都有解释了,一些易错的地方我一般都用console.log()在控制台查看了,这些地方可以多注意
// 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。所有输入只包含小写字母 a-z 。
//输入的是字符串数组,所以要先遍历数组,将字符串全部取出
var longestCommonPrefix = function(arr) {
//将数组第一个字符串选作为要与后面字符串比较的字符串,只要该字符串的每一项与后面每个字符串对应项的字符一样,那么这就是要求的公共前缀
//如果该数组为空,那么直接返回''
if(arr.length == 0){
return ''
}
//循环遍历出每一项的长度
var arr_length = []
for( var k = 0 ; k <arr.length ; k++){
arr_length.push(arr[k].length)
// console.log(arr_length)
}
//将长度排序
arr_length.sort()
//取出第一项,即长度最短的那个数
var num = arr_length[0]
// console.log(num)
//创建一个装入公共前缀的空字符串
var newArr = [];
//创建装入j的值的数组
var arr_j = []
//遍历从下标为1开始的每一个字符串
for (var i = 1; i < arr.length; i++) {
//遍历每一个字符串的每一位,进入下一步判断,每一个字符串的对应下标的字符是否与第一项相同
for (var j = 0; j < num; j++) {
//遍历第一个字符串的每一项
// console.log(i,j)
//此时 j 的最小值就为公共前缀的位数
if (arr[0][j] !== arr[i][j]) {
break;
}
}
arr_j.push(j)
}
for( var z = 0 ; z < arr_j.length - 1 ; z ++){
//for循环找到其他的数据项
for( var x = z + 1 ;x <arr_j.length ;x ++){
//判断大小
if(arr_j[z] > arr_j[x]){
//换位
var temp = arr_j[z];
arr_j[z] = arr_j[x];
arr_j[x] = temp
}
}
}
var j_min = arr_j[0];
// console.log(j_min)
newArr.push(arr[0].substring(0,j_min))
console.log(newArr)
if (newArr.length != 0){
return newArr.toString()
}
return ''
};