leetcode 14 最长公共前缀 JavaScript
思路:
纵向扫描(个人觉得比较好理解的解法):首先取数组str中第一个字符串(strs[0]),从strs从第二个字符串开始循环(strs[1]开始),每次循环都用一个j来记录本次循环能够取到的最长字符串长度,之后只需要对最开始取出来的字符串进行一个截取0到j的长度就能够得到本次循环的公共前缀了。那么具体这个j应该怎么统计呢 举个例子:
[flower,flow,flight] 取出flower作为参照。从第二个flow开始,本次循环是flower和flow做比较,j就是我们当前扫描的位置。
j=0 两个都是f,j++;
j=1 两个都是l,j++;
j=2 …直到j=3,也都是w,j++遍历结束因为flow已经遍历完了。此时最长公共前缀更新为substring(0,4)得到flow
下一次循环到flight,flow和flight比较
j=0 都是f j++;
j=1 都是l j++;
j=2 发现不一样了 此时j不再自增
最长公共前缀更新为substring(0,2)得到fl
到这里整个strs遍历完了,结果为fl。
代码如下:
var longestCommonPrefix = function(strs) {
if(strs.length==0) return "";
let ans = strs[0];//取第一个数作为对比
for(let i = 1; i<strs.length;i++){//遍历strs
let j = 0;//用于记录本次遍历strs[i]时能够取到最长的字符串长度
while(j<ans.length && j<strs[i].length){
if(ans[j] !=strs[i][j]) break;
j++;
}
ans = ans.substring(0,j)
if(ans=="") return ans;
}
return ans;
};