众所周知,我是一条大咸鱼,刚开始接触算法,其实这是刷的第5道题了(刷的都是easy难度的 T.T),进展缓慢
这题我是参考了leetcode上赞比较高的一个解,之前也有自己想的暴力解,但是看到这么一句话:算法如果使用暴力解,那将毫无意义;
一、题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串""。 示例1
输入: strs = ["flower","flow","flight"]
输出: "fl"
示例2
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
二、解题思路
我来复述一下解题思路
- 选取数组的第一个值
array[0]作为参考 - 将它与下一个值做循环比较
- 当比对到发现不一致时,跳当前这个对比循环
- 截取相同部分,进入下一次循环,重复
2~4步
三、代码
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function (strs) {
// 选择第一个值为参照
let result = strs[0];
for (let i = 1; i < strs.length; i++) {
// 记录点位
let j = 0;
// 用当前值的每一个字符与strs的值字符 做对比
for (; j < result.length && strs[i].length; j++) {
// 当字符不一致是结束循环
if (result[j] != strs[i][j]) {
break;
}
}
// 更新结果 选取0-j 之间的字符
result = result.substr(0, j);
// 当j为0时 既没有相同的字符 结束循环
if (result == '') return result;
}
return result
};
四、反思一下(大白话时间)
算法这东西,没接触过是真没想法,觉得前期还得是多看多学,多看看优质解,学习一下思路,上面这题算简单的,没啥好说的,关键是思路,官方还有二分法,这个我觉得不错,一会吸收过来,之前听人讲了可以用二分法解决,但是思考了半天没想明白怎么操作;
嗐,多看看吧,慢慢积累争取早日把easy都过一遍。T.T