题目

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

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

知识点

substr(0, i) 表示从字符串的起始位置(索引 0)开始截取,直到索引 i 的位置,但不包括索引 i 本身。也就是说,它会截取从第 0 个字符到第 i-1 个字符的子字符串。这是大多数编程语言中 substr 或类似字符串截取函数的通用行为。

代码 —— 纵向思维

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(!strs.size()) return "";
        int lenght = strs[0].size();
        int n = strs.size();
        for(int i = 0;i < lenght;i++)
        {
            char c = strs[0][i];
            for(int j = 1;j < n;j++)
            {
                if(strs[j][i] != c)
                {
                    return strs[0].substr(0,i);
                }
            }
        }
        return strs[0];
    }
};

代码 —— 横向思维

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);
    }
};