LeetCode刷题日记(简单)- 14. 最长公共前缀

98 阅读1分钟

前言

一个小伙伴说希望成立一个刷题小组,本就着富强、民主、文明、和谐,倡导自由、平等、公正、法治,倡导爱国、敬业、诚信、友善,积极培育社会主义核心价值观,我答应他了。

因为也没有刷过题,比较菜。然后就看了下别人家的孩子怎么刷题的,这里附上链接。

-力扣传送门-

朝花夕拾 - 2019 总结(附 283 道 LeetCode 题解)

我是如何刷 LeetCode 的?

题目描述:

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例

输入: strs = ["flower","flow","flight"]
输出: "fl"
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
/**
 * @param {string[]} strs
 * @return {string}
 * 只考虑前缀的话,可以逐个比较,拿到公共部分,比较长度拿到最小的就可以了。
 */
var longestCommonPrefix = function (strs) {
    //字符串公共部分
    function getPublic(str1, str2) {
        let len = str1.length < str2.length ? str1.length : str2.length
        let resStr = ""
        for (let j = 0; j < len; j++) {
            if (str1[j] == str2[j]) {
                resStr += str1[j]
            } else {
                break
            }
        }
        return resStr
    }
    //取第一个作为比较字符串,初始化
    let PreStr1 = strs[0]
    for (let i = 1; i < strs.length; i++) {
        PreStr1 = getPublic(PreStr1, strs[i])
    }
    return PreStr1
};

image.png

太菜了,看看大佬们怎么写的。

image.png

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if(strs.length == 0) 
        return "";
    let ans = strs[0];
    for(let i =1;i<strs.length;i++) {
        let j=0;
        for(;j<ans.length && j < strs[i].length;j++) {
            if(ans[j] != strs[i][j])
                break;
        }
        ans = ans.substr(0, j);
        if(ans === "")
            return ans;
    }
    return ans;
};

好像思路和大佬是一样的,就是没有大佬的效率高,还是太菜了。