leetcode14. 最长公共前缀

leetcode14. 最长公共前缀

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

最长公共前缀解析

leetcode14. 最长公共前缀_第2张图片

题目分析

该问题要求找到一组字符串中的最长公共前缀。公共前缀是指在一个字符串集合中,所有字符串都共同拥有的起始子串。

算法介绍

首先,将第一个字符串作为公共前缀的初始候选。然后,逐个与剩余的字符串进行比较,更新公共前缀。在比较两个字符串时,找到它们共有的最长前缀。

算法步骤

  1. 如果字符串数组为空,返回空字符串。
  2. 将第一个字符串设为公共前缀的初始值。
  3. 遍历字符串数组,逐个与当前公共前缀进行比较。
  4. 在每次比较中,更新公共前缀为两个字符串的公共前缀。
  5. 如果公共前缀变为空,停止比较并返回结果。

算法流程

开始
检查字符串数组是否为空
返回空字符串
将第一个字符串设为公共前缀
遍历字符串数组
比较当前字符串与公共前缀
更新公共前缀
检查公共前缀是否为空
结束

具体代码

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (!strs.size()) {
            return "";
        }
        string prefix = strs[0];
        int count = strs.size();
        for (int i = 1; i < count; ++i) {
            prefix = longestCommonPrefix(prefix, strs[i]);
            if (!prefix.size()) {
                break;
            }
        }
        return prefix;
    }

    string longestCommonPrefix(const string& str1, const string& str2) {
        int length = min(str1.size(), str2.size());
        int index = 0;
        while (index < length && str1[index] == str2[index]) {
            ++index;
        }
        return str1.substr(0, index);
    }
};

算法分析

  • 复杂度:时间复杂度为 O(S),其中 S 是所有字符串的总长度。
  • 易错点:在比较字符串时,需要确保不会越界。
  • 注意点:在更新公共前缀时,需要考虑字符串长度的差异。

相似题目

题目 链接
最长公共子序列 LeetCode
最长公共子串 LeetCode
字符串的排列 LeetCode

你可能感兴趣的:(力扣刷题,数据结构,算法,golang,c++,面试,leetcode,go)