最长公共前缀|刷题打卡

429 阅读2分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

题目描述

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

例如数组strs = ["flower","flow","flight"],最长公共前缀是"fl"
数组["dog","racecar","car"],不存在公共前缀,结果就是""

思路分析

要取的是公共前缀,数组中每个字符串的开头都要是一样的,所以可以先取第一个字符串,跟其他字符串一一比较。

比较的时候,因为要取相同的前缀,所以从第0个字符开始比较,不相等就退出内循环,此时的j为相等字符处的下标,原字符串进行截取,得出最后的结果。记得在最开始的时候,判断字符串长度。

const longestCommonPrefix = function (list) {
    if(list.length === 0){
        return ""
    }
    //起始取第一个字符串作为对比
    let str = list[0]
    //遍历数组,从第二个i=1开始
    for (let i = 1; i < list.length; i++) {
        let j = 0
        //当前字符串list[i]遍历
        for (; j < list[i].length; j++) {
            //两个字符串对比第j个字符,不相等就不需要了,退出循环
            if (str[j] !== list[i][j]) {
                break
            }
        }
        //退出循环后,得到的j,即为当前相等的地方
        str = str.substring(0, j);
    }
    return str
}

官方解题里,采用的是横向扫描的方式。遍历数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。Java版的,后续可以试试改成js来写。

总结

坚持LeetCode刷题,自己尝试去解题,可能自己的方法不是最好最快最优的,也可能自己的方法或多或少还是存在问题,但是这是一个过程,坚持的过程。每次做完之后,再去看官方的解答,起初不一定能看得懂,等到看懂了才会恍然大悟。