首页 > 试题广场 >

最长公共前缀

[编程题]最长公共前缀
  • 热度指数:159173 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。

数据范围:
进阶:空间复杂度 O(1),时间复杂度 O(n*len)
示例1

输入

["abca","abc","abca","abc","abcc"]

输出

"abc"
示例2

输入

["abc"]

输出

"abc"
/**
  * 
  * @param strs string字符串一维数组 
  * @return string字符串
  */
function longestCommonPrefix( strs ) {
    if(strs.length==0) return "";
    let ans=strs[0];
    for(let i=1;i<strs.length;i++){
        if(strs[i].length<ans.length){
            ans=ans.slice(0,strs[i].length)
        }
        for(let j=0;j<strs[i].length;j++){
            if(strs[i][j]!=ans[j]){
                ans=ans.slice(0,j)
                break
            }
        }
    }
    return ans
}
module.exports = {
    longestCommonPrefix : longestCommonPrefix
};

发表于 2023-01-31 21:13:55 回复(0)
/**
  * 
  * @param strs string字符串一维数组 
  * @return string字符串
  */
function longestCommonPrefix( strs ) {
    // write code here
    if (strs.length === 0) return ''
    if (strs.length === 1) return strs[0]
    strs.sort()
    const first = strs[0],last=strs[strs.length -1]
    let str = ''
    for (let i = 0; i < first.length; i++) {
      if (first[i] === last[i]) {
        str += first[i]
        continue
      }
      break
    }
    return str
}
module.exports = {
    longestCommonPrefix : longestCommonPrefix
};

发表于 2022-11-16 23:34:11 回复(0)
贪心算法
/**
  * 
  * @param strs string字符串一维数组 
  * @return string字符串
  */
function longestCommonPrefix( strs ) {
    // write code here
    if(strs.length===0){
        return "";
    }
    let ans=strs[0];
    for(let i=1;i<strs.length;i++){
        if(ans.length>strs[i].length){
            ans=strs[i];
        }
    }
    for(let i=0;i<strs.length;i++){
        if(strs[i].indexOf(ans)===0){
            continue;
        }else{
            ans=ans.substring(0,ans.length-1);
            i--;
        }
    }
    return ans;
}
module.exports = {
    longestCommonPrefix : longestCommonPrefix
};


发表于 2022-07-25 22:51:23 回复(0)
1.横向扫描
function find(s1,s2){
    var n=s1.length
    for(var i=0;i<n;i++){
        if(s1[i]!==s2[i]){
            break
        }
    }
    return s1.slice(0,i)
}
function longestCommonPrefix( strs ) {
    if(strs.length===0){
        return ""
    }
    return strs.reduce((a,b)=>{
        return find(a,b)
    })
}
2.纵向扫描
function longestCommonPrefix( strs ) {
    if(strs.length===0){
        return ""
    }
    strs.sort((a,b)=>a.length-b.length)
    var n=strs[0].length,res
    for(var i=0;i<n;i++){
        res=strs.every((e,index)=>{
            return e[i]===strs[0][i]
        })
        if(res===false){
            break
        }
    }
    return strs[0].slice(0,i)
}


发表于 2021-09-05 12:38:52 回复(0)
/**
  * 
  * @param strs string字符串一维数组 
  * @return string字符串
  */
//纯纯的双重循环js写法
function longestCommonPrefix( strs ) {
    var a ="";
    if(strs.length == 1) {
     return strs[0];
    }
    if(strs.length ==0){
        return a;
    }
        for (var j = 0; j < strs[0].length; j++) {
            for (var i = 0; i < strs.length; i++) {
            if (strs[i][j] != strs[0][j]) {
                return a;
            }
        }
        a += strs[0][j];
    }
    return a;
}
module.exports = {
    longestCommonPrefix : longestCommonPrefix
};

发表于 2021-08-27 10:47:21 回复(0)
JS的解答太少了,哎,对前端的人真不友好,打个卡,记录一下我的题解
   if(strs.length==0)return ""
    // write code here
   let  temp=strs[0]
   while(temp.length>0){  //如果自减到长度为零还不能执行,没救了,有个锤子公共前缀
         
   if(strs.every(item=>{
       return item.indexOf(temp)==0  //满足所有的才会返回true
   })){
       return  temp
   }else{
       temp=temp.slice(0,temp.length-1)
   }
    
   }
 
    return  ""  //没有,回家吃饭了
    


发表于 2021-07-27 17:03:43 回复(0)
function longestCommonPrefix( strs ) {
    // write code here
    if (strs.length < 1) return '';
    if (strs.length === 1) return strs[0];
    strs.sort();
    const first = strs[0], end = strs[strs.length - 1];
    let res = '';
    for (let i = 0; i < first.length; i++) {
        if (first[i] !== end[i]) break;
        res += first[i];
    }
    return res;
}

发表于 2021-04-15 12:31:12 回复(0)
javascript判断是否包含该元素,只需找出每个数组元素有一个不满足则返回其值;
function longestCommonPrefix( strs ) {
    
    // write code here
    let str = strs[0];
    if(strs.length==0 || str.length==0) return ''
    let item = ''
    for(let i = 0; i < str.length; i++) {
        item += str[i];
        if(!strs.every(el => el.includes(item))) {
            return item.substr(0,item.length-1);
        }
    }
    return str
}
module.exports = {
    longestCommonPrefix : longestCommonPrefix
};

发表于 2020-12-24 21:37:20 回复(0)
暴力解决
取数组的第一个元素,将数组的第一个元素与数组的其余元素逐一比较,判断是否有相同的字符,若有,则将相同的字符剪切返回。
1.取数组的第一元素
2.遍历数组除第一个元素以外的其余元素
3.遍历每个元素的字符串
4.判断每个每个字符串中的字符值是否相同,不相同,则结束当前循环
5.利用substring()函数,剪切最长公共字符
function longestCommonPrefix( strs ) {
    // write code here
if(strs === null || strs.length === 0) return ''
var str = strs[0]
 for(var i =1;i<strs.length;i++){
     for(var j = 0;j<str.length&&strs[i].length;j++){
         if(str[j]!= strs[i][j]){
             break
         }
     }
     str = str.substring(0,j)
         if(str === '') return ''
 }
return str
}

发表于 2020-12-17 12:00:17 回复(0)