横向扫描

初始化最长公共前缀 result 的值为数组第一个字符串
遍历后面的字符串,依次将其与 result 进行比较,两两找出公共前缀,遇到字符不同结束遍历即可
通过 k 记录当前遍历到的相同下标,然后直接重新赋值即可 result = result.slice(0, k)
时间复杂度:O(mn),其中 m 是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。

边界条件
当字符串数组长度为 0 时则公共前缀为空,直接返回
时间上的优化,可以通过 nowLength = result.length 存储当前记录的公共前缀长度,后面 while 循环时就可以用这个存储的变量作为边界条件约束 k 

/**
  * 
  * @param strs string字符串一维数组 
  * @return string字符串
  */
function longestCommonPrefix( strs ) {
    // write code here
    let len = strs.length, res, k;
    if(!len)return '';
    res = strs[0];// 最长公共前缀初始化为第一个字符串
    for(let i = 0;i < len;i++){
        k = 0;// 当前遍历到的下标,即将公共前缀长度初始化为0
        while(k < res.length && res[k]===strs[i][k]){// 直到遍历到第一个不是公共前缀的位置
            k++;
        }
        res = res.slice(0,k);
    }
    return res;
}
module.exports = {
    longestCommonPrefix : longestCommonPrefix
};