编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:
输入: ["flower","flow","flight"]
输出: "fl"示例 2:
输入: ["dog","racecar","car"]
输出: ""说明:
所有输入只包含小写字母 a-z 。

解决方案 »

  1.   

    function prefix(arr){
    var r = ''
    if (arr.sort)
    {
    r = arr[0].toLowerCase()
    for(var i=1;i<arr.length;i++){
    var x='';
    for(var j=0;j<r.length&&j<arr[i].length;j++){
    if (r[j]==arr[i].toLowerCase()[j])
    {
    x+=r[j]
    }else{
    break
    }
    }
    r=x
    if (!x)
    {
    break;
    }
    }
    }
    return r
    }
    alert(prefix(['xxoo','xxuroo','xxalloo','xxinoo']))
      

  2.   

        //正则匹配简单但没性能
        function getPrefix(arr) {
            if (Array.isArray(arr)) {
                let len = arr.length
                if (len > 1) {
                    let reg = arr.join(',').match(new RegExp('^(.+).*,' + Array(len - 1).fill('\\1.*').join(',')))
                    return reg ? reg[1] : ''
                } else {
                    return arr[0]
                }
            }
        }
        console.log(getPrefix(["flower","flow","flight"]))
        console.log(getPrefix(["dog","racecar","car"]))
        console.log(getPrefix(["我艹cdog","我艹cecar","我艹car"]))
        console.log(getPrefix(["racecar"]))
      

  3.   


    alert(prefix([]))    //出错
      

  4.   

    console.log(getPrefix([]))  //出错
      

  5.   

        function getPrefix(arr) {
            if (Array.isArray(arr)) {
                let newArr = arr.slice(0) //克隆一份
                let len = arr.length
                if (len > 1) {
                    newArr.sort((a, b) => a.length > b.length ? 1 : -1) //排序一下
                    let per = newArr.shift()
                    let match
                    while(per && !match){
                        match = true
                        newArr.forEach(v=>{
                            if(!v.startsWith(per)){
                                match = false
                            }
                        })
                        if(!match){
                            per = per.slice(0,-1)
                        }
                    }
                    return per
                } else {
                    return arr[0]
                }
            }
        }
        console.log(getPrefix(["flower","flow","flight"]))
        console.log(getPrefix(["dog","racecar","car"]))
        console.log(getPrefix(["我艹cdog","我艹cecar","我艹car"]))
        console.log(getPrefix(["racecar"]))或者使用split分割判断都可。
      

  6.   


    console.log(getPrefix([]))  //出错
      

  7.   

        //正则匹配简单但没性能
        function getPrefix(arr) {
            if (Array.isArray(arr)) {
                let len = arr.length
                if (len > 1) {
                    let reg = arr.join(',').match(new RegExp('^(.+).*,' + Array(len - 1).fill('\\1.*').join(',')))
                    return reg ? reg[1] : ''
                } else {
                    return len === 1 ? arr[0] : ''
                }
            }
        }
      

  8.   

    用正则表达式解很简单的function prefix(arr){
    var r = arr.join(",").match(/^([^,]+)[^,]*(,\1[^,]*)*$/);
    return r ? r[1] : "";
    }
    alert(prefix(["flower","flow","flight"]))
      

  9.   


    alert(prefix([]))    //出错 if (arr.sort)修改成
    if (arr.sort && arr.length)之前没有判断数组元素为0的情况,自己调整下,不要什么都等别人弄好了