leetcode----最长公共前缀

题目:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

初学算法, 没什么思路。 在网络上搜索到四种解题思路,打算一一尝试。 

思路来源:https://www.aliyun.com/jiaocheng/17602.html

方法一:横向遍历。 以第一个string为标准,依次判断是否是前缀,如果不是就减一,直到为前缀。

我的代码:

    var longestCommonPrefix = function( strs ) {
        var maxNum = strs.length - 1; // 数组长度
        if (maxNum < 0) return ""; // -1 取反为 true
        else if (maxNum === 0) return strs[maxNum];
        else{
            var temp = strs[0]; // 记录第一个字符串为LCP(公共前缀)
            var num = 1; // 记录比较位置
            while(temp){
                if (temp === strs[num] ) {
                    temp = strs[num];
                }else if( temp !== strs[num] ) {
                    var len = temp.length > strs[num].length ? temp.length : strs[num].length;
                    for (var i = 0 ; i < len ; i++) {
                        if (temp.charAt(i) !== strs[num].charAt(i)) {
                            temp = temp.substr(0, i);
                            break;
                        }
                    }
                }
                if (num === maxNum) break; //判断是否到最后一个
                else {
                    num++;
                }
            }
        }
        return temp;
    };

刚写完自己还比较开心, 但发现我的执行时间为100ms+时, 和leetcode上别人的时间比多了不是一点半点。 尝试完其余方法后, 就去leetcode上研究别人的思路了。

方法二:纵向遍历。 从第一个字符开始遍历,知道找到所有字符串出现不一样的字符为止

我的代码:

    var longestCommonPrefix = function (strs) {
        var maxLen = strs.length;
        if (maxLen === 0) return "";
        if (maxLen === 1) return strs[0];
        var temp = ""; // 存放LCP
        var num = null; // 记录位置
        var str = strs[0];
        for (var i = 0; i < str.length; i++) {
            for (var j = 0 ; j < maxLen - 1; j++) {
                if (strs[j][i] !== strs[j+1][i]) {
                    return temp;
                }
                num = i + 1;
            }
                temp = str.substr(0, num);
        }
        return temp;
    };

这次比上次快了30ms, 看来选择不同方法速度就会有明显改善。 算法真好玩。 

猜你喜欢

转载自blog.csdn.net/HimBer/article/details/82557177