题目地址

解题思路

该题目根据官方题解,有四种方式。

  • 横向扫描

    1. 就是将先求出第一个,第二个的字符的公共的前缀,然后将结果与第三个比较,求出结果与第四项比较,类似
  • 纵向扫描

    选取第一项作为基准。将第一项中的字符元素与strs中[1,n]项进行比较。当strs的第j项中的第i元素不存在或者该元素不等于strs中第0项中的第i个元素,则退出

代码

const commonPrefixItem1 = (s1,s2)=>{
    let res = '';
    let n = Math.min(s1.length,s2.length);
    for(let i = 0;i<n;i++){
       if(s1[i] === s2[i]){
         res += s1[i]
       }else{
        break;
       }
    }
    return res;
}
const longestCommonPrefix1 = (strs)=>{
    const len = strs.length;
    let res = strs[0];
    for(let i = 1;i<len;i++){
      res = commonPrefixItem1(res,strs[i]);
      if(res.length === 0){
         return '';
      }
    }
    return res;
}
var longestCommonPrefix = function(strs) {
   let res = '';
   if(strs.length === 0) return res;
   const n = strs[0].length,m = strs.length;
   for(let i = 0;i<n;i++){
    const c = strs[0][i];
    for(let j = 1;j<m;j++){
      if(!strs[j][i] || strs[j][i] !== c){
          return strs[0].slice(0,i)
      }
    }
   }
   return strs[0];
};