LeetCode 热题 100 总结——最长公共前缀

72 阅读2分钟

思路

讲述看到这一题的思路
以第一个字符串为基准,依次遍历每一个字符串的字符是否和第一个字符串相等

解题方法

描述你的解题方法
外层for循环遍历第一个字符串的i个字符,内层for循环遍历第j个字符串的第i个字符;内层for循环遍历每一个字符串,判断字符串j的第i个字符是否和第一个字符串相等,循环结束后,若j的大小大于字符串的大小,说明此时所有字符串的第i个字符均相等

复杂度

时间复杂度:

添加时间复杂度, 示例: O(n)O(n)O(n)

时间复杂度:O(n∗m∗log(n))O(nmlog(n))O(n∗m∗log(n))。这里的n是字符串数组的长度,m是数组中最短字符串的长度。sort函数的时间复杂度是O(nlog(n)),然后在最坏的情况下,我们需要遍历每个字符串的每个字符,所以总的时间复杂度是O(nm*log(n))。

空间复杂度:O(1)。这个代码中,我们只使用了常数个变量,所以空间复杂度是O(1)。
空间复杂度:

添加空间复杂度, 示例: O(n)O(n)O(n)
O(1)O(1)O(1)

public:
    string longestCommonPrefix(vector<string>& strs) {

        string ans = "";
        if (strs.size() == 0)
            return ans;
        sort(strs.begin(), strs.end());
        for (int i = 0; i < strs[0].size(); i++) // 遍历第一个字符串的所有字符
        {
            char temp = strs[0][i];
            printf("strs[0]: %c\n", strs[0][0]);
            int j;
            for (
                j = 1; j < strs.size();
                j++) // 遍历所有的字符串,看看第i个字符是否相等,如果相等,继续遍历下一个字符串,否则退出循环
            {
                if (temp !=
                    strs[j]
                        [i]) // 如果不相等,直接退出循环;否则继续遍历下一个字符串
                    break;
            }
            if (j >=
                strs.size()) { // 说明所有的字符串的第i个字符都是一样的,将其加入到ans中
                ans += temp;
            } else
                break;
        }

        return ans;
    }
};

作者:JiaPeng Cai
链接:https://leetcode.cn/problems/longest-common-prefix/solutions/2736647/leetcode-re-ti-100-zong-jie-zui-chang-go-oxsl/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。