leetcode题解14-最长公共前缀
发布日期:2025-04-05 05:03:50 浏览次数:10 分类:精选文章

本文共 1644 字,大约阅读时间需要 5 分钟。

问题描述

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

示例 1:

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

示例 2:

输入: ["dog", "racecar", "car"]
输出: ""

说明: 所有输入只包含小写字母 a-z。

算法思想

按照题意,我们只需拿出数组中的第一个字符串,然后来判断其他字符串是否与第一个字符串指定位置上的字符相等。具体步骤如下:

  • 检查数组是否为空。如果为空,直接返回空字符串。
  • 初始化一个空字符串作为结果,用于存储公共前缀。
  • 遍历第一个字符串的每个字符位置,逐步构建前缀。
  • 对于每一个当前字符位置 i:
    a. 取出第一个字符串的第 i 个字符。
    b. 遍历其他字符串的第 i 个字符,判断是否与第一个字符串的字符相同。
    c. 如果有任何一个字符串的第 i 个字符与第一个字符串的不同,则停止比较,返回当前的结果。
    d. 如果所有字符串的第 i 个字符都相同,则将字符添加到结果中,并继续下一个位置。
  • 注意:

    • 如果数组中某个字符串比第一个字符串短,那么前缀最多只能取到该字符串的长度。
    • 存在空字符串的情况,直接返回空字符串。

    代码实现

    问题描述

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

    如果不存在公共前缀,返回空字符串 “”。
    示例 1:

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

    输出: "fl"

    示例 2:

    输入: ["dog", "racecar", "car"]

    输出: ""

    说明:

    所有输入只包含小写字母 a-z。

    算法思想

    按照题意,我们只需拿出数组中的第一个字符串,然后来判断其他字符串是否与第一个字符串指定位置上的字符相等。如果存在公共前缀,我们逐步扩展这个结果。当发现位置上的字符不一致时,就断定前缀结束。这里需要注意的问题是边界条件,例如当数组为空,或者某个字符串的长度小于第一个字符串等。

    代码实现

    以下是一个实现思路示例:

    ```htmlfunction longestCommonPrefix(strs) { if (strs.length === 0) { return ""; } let result = ""; const firstStr = strs[0]; for (let i = 0; i < firstStr.length; i++) { const char = firstStr[i]; for (const str of strs) { if (str[i] !== char) { return result; } } result += char; } return result;}

    该函数首先检查数组是否为空。如果为空,直接返回空字符串。然后取出第一个字符串作为基准,逐个检查每个字符位置的所有字符串是否相同。如果某一位置存在不同,则返回当前结果。如果所有字符串的所有字符都相同,则继续检查下一个字符位置直到处理完第一个字符串的所有字符。当第一个字符串处理完毕后,返回结果。

    在实现过程中需要注意以下几点:

    - 如果数组中存在空字符串,则直接返回空字符串。 - 如果某个字符串的长度小于第一个字符串,则只比较该字符串的可用部分。 - 对于每一个字符位置,如果某个字符串在该位置不存在字符,则直接断定没有公共前缀。

    上一篇:leetcode题解15-三数之和(双指针经典)
    下一篇:leetcode题解136-只出现一次的数字

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月24日 19时58分31秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章