目前准备隔三差五做个leetcode算法题保持一下算法思维,作为个人能力全方位提升的一部分

最长公共前缀

1
2
输入:strs = ["flower","flow","flight"]
输出:"fl"

要求:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成
  1. 逐位比较,比较全部通过时re增加当前字符,不通过时直接返回re。
1
2
3
4
5
6
7
8
9
10
11
12
let longestCommonPrefix = function(strs) {
let re = '';
if (!strs.length) return re;
for (let j=0;j<strs[0].length;j++){//第j位
for (let i=1;i<strs.length;i++){//第i个
if (strs[i][j]!=strs[0][j]) return re
}
re += strs[0][j];
}
return re;
};

  1. 解一的递归版本,需要增加一些判断语句。
1
2
3
4
5
6
7
8
9
10
11
12
let longestCommonPrefix = function (strs,re = '') {
if (!strs.length) return re;
if (strs.length == 1) return strs[0];
for (let i = 1; i < strs.length; i++) {
if (!strs[i][0]) return re
if (strs[i][0] != strs[0][0]) return re
strs[i] = strs[i].slice(1,strs[i].length);
}
re += strs[0][0];
strs[0] = strs[0].slice(1,strs[0].length);
return longestCommonPrefix(strs, re);
};