【初级算法|字符串】14-最长公共前缀

84 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

【初级算法|字符串】14-最长公共前缀

题目

编写一个函数来查找字符串数组中的最长公共前缀。(所有的输入只包含小写字母a-z)

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

输入:strs = ["flower","flow","flight"]
输出:"fl"
​
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

思路分析

公共前缀,所有元素中都包含此元素,若从一个数组中勋章最长公共前缀,可以先将第一个元素设置为基准,,然后只需要根据基准元素和后面的元素进行比较,并且不断更新基准,直到基准元素和所有的元素都满足最长公共前缀的条件。

比如,base = flower,作为基准元素,然后一次进行判断“f”,“fl”,“flo”,“flow”,“flowe”,“flower”,判断哪一个是所有字符串的前缀。不断判断,如果不是就更新基准 base值。

在处理基准元素时,如果基准元素和任何一个元素都不匹配,那说明不存在最长公共元素。还需要注意临界条件。如果给定数组是空,也说明没有最长公共元素

AC 代码

function func_exerise11(strs) {
    if (strs.length < 1) return "";
​
    let base = strs[0]
    for (let i = 0; i < strs.length; i++) {
        while (base != strs[i]) {
            if (base == '') return ''
            base = base.strSub(base.length - 1)
        }
    }
    return base;
}

总结

没有想到其他更好的方法解决?如果使用分治法解决,从中找到最小长度的字符串,然后将字符串分治解决。

题目来源:leetcode-cn.com/leetbook/re…