当前位置: 面试刷题>> 最长公共前缀(经典算法150题)


题目描述

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

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

假设所有输入都是非空字符串。

示例 1:

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

示例 2:

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

注意:本题要求解法需要尽可能地优化性能,特别是在处理大量字符串或非常长的字符串时。

PHP 示例代码

function longestCommonPrefix($strs) {
    if (empty($strs)) return "";
    
    $prefix = $strs[0];
    foreach ($strs as $str) {
        // 当发现前缀不是当前字符串的前缀时,缩短前缀长度并重新检查
        while (strpos($str, $prefix) !== 0) {
            $prefix = substr($prefix, 0, -1);
            if (empty($prefix)) {
                return "";
            }
        }
    }
    
    return $prefix;
}

// 测试
echo longestCommonPrefix(["flower","flow","flight"]); // 输出: fl
echo longestCommonPrefix(["dog","racecar","car"]);    // 输出: 

Python 示例代码

def longestCommonPrefix(strs):
    if not strs:
        return ""
    
    prefix = strs[0]
    for s in strs:
        while not s.startswith(prefix):
            prefix = prefix[:-1]
            if not prefix:
                return ""
    
    return prefix

# 测试
print(longestCommonPrefix(["flower","flow","flight"]))  # 输出: fl
print(longestCommonPrefix(["dog","racecar","car"]))     # 输出: 

JavaScript 示例代码

function longestCommonPrefix(strs) {
    if (strs.length === 0) return "";
    
    let prefix = strs[0];
    for (let i = 1; i < strs.length; i++) {
        while (strs[i].indexOf(prefix) !== 0) {
            prefix = prefix.slice(0, -1);
            if (prefix === "") return "";
        }
    }
    
    return prefix;
}

// 测试
console.log(longestCommonPrefix(["flower","flow","flight"])); // 输出: fl
console.log(longestCommonPrefix(["dog","racecar","car"]));     // 输出: 

文章添加逻辑

在撰写关于这道题的文章时,你可以从以下几个方面入手:

  1. 问题引入:简要介绍最长公共前缀的概念,并说明其在字符串处理中的重要性。
  2. 题目解析:详细解释题目要求,并给出示例输入与输出,帮助读者理解问题。
  3. 解法探讨
    • 介绍几种可能的解法思路,如水平扫描(横向比较)和纵向扫描(从字符位置入手)。
    • 分析每种解法的优缺点,并指出哪种解法更适用于本题。
  4. 代码实现
    • 分别给出 PHP、Python、JavaScript 的代码实现,并解释代码逻辑。
    • 可以提到性能优化点,比如避免不必要的字符串比较和复制。
  5. 总结与扩展
    • 总结解题思路和关键点。
    • 提及一些相关概念或算法,如字符串匹配算法、Trie 树等,以及它们在处理字符串问题时的应用。
    • 邀请读者到“码小课”网站学习更多相关内容,参与讨论和练习。

通过这样的结构,你可以撰写出一篇既全面又深入的关于最长公共前缀算法的文章,并在其中自然地融入对“码小课”网站的推广。