「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」
问题描述
编写一个函数来查找字符串数组中的最长公共前缀。如果没有数组内没有公共前缀的话,那就返回一个空字符串 ""。
示例:
输入:strs = ["flower","flow","flight"]
输出:"fl"
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀
解题思路
一看到目标是一个数组,我第一想到的就是循环,只有这样才能拿到每个元素。回归正题吧,想要找出最长的公共前缀,就必须拿到数组中的每个元素,取到每个元素的字母去一一作对比,字母的位置必须是一致的,比如第一个字母要和其他元素的第一个字母相比较,第二个字母要个其他元素的第二个字母相比较,只要有一个对比不一致就可以结束第一个元素的循环了。
代码实现
首先函数内先判断传进参数的数据类型,这里只接受数组,若传进的类型不是数组就return出去,若传进一个空数组也return出去。声明一个字段用来保存公共前缀。循环数组的第一个元素的时候,取出字母按顺序和其他元素的字母做对比,若是都相等,那么就将这个字母和之前保存的字母拼(若是没有则直接赋值)接并保存,若是有一个不相等就结束循环并return出结果。这里使用数组的every()方法,必须判断每一项都匹配才能返回true,只要有一个不匹配就返回false;还有一个方法:charAt(),根据循环时的下标取到对应的字母用来做判断。
let a = ["flower", "fliow", "flioght"];
function change(arr) {
if (Object.prototype.toString.call(num) !== '[object Array]' || arr.length === 0) return '';
let str = "";
for (let i = 0; i < arr[0].length; i++) {
let a = arr[0][i];
let flag = arr.every(item => item.charAt(i) == a)
if (!flag) break;
str = str + a;
}
return str;
}
console.log(change(a));