leetcode 14 最长公共前缀(c++和python)

目录

题目描述:

C++代码:

c++代码:

python代码:


题目描述:

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

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

示例 1:

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

示例 2:

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

说明:

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

C++代码:

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:9 MB, 在所有 C++ 提交中击败了46.26%的用户

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (strs.size() < 1) return "";
        if (strs.size() == 1) return strs[0];  // 只有一个字符串
        // 不止一个字符串,则以第一个字符串为准,每个字符串都依次与第一个字符串进行比较,看前缀是否相等.
        for (int i = 0; i < strs[0].size(); i++)  // 遍历第一个字符串的每个字符
        {
            // 在比较的位置相同的情况下, 依次与其他字符串在相同的位置处进行比较
            int m = 1;
            while (m < strs.size())   
            {
                if (strs[m][i] == strs[0][i])  // 当前位置相同,则比较下一个字符串
                {
                    m++;
                }
                // else break;  // 单纯的跳出内层循环不行,外层会继续,i会累加。
                else return strs[0].substr(0, i);  // 否则不同,则返回结果。 
            }
        }
        return strs[0];   // 前面没有返回,则说明其他所有字符串都与第一个字符串长度相等,每个字符相等,一直比较到末尾
    }
};

c++代码:

思路:依次和第一个字符串比较,在所有字符串不越界,字符且相等的前提下,拼接当前字符。

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:8.8 MB, 在所有 C++ 提交中击败了91.60%的用户

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int str_len = strs.size();
        if (str_len == 1) return strs[0];

        string com_str = "";
        for (int i = 0; i < strs[0].size(); i++)  // 依次和第一个字符串的比较
        {
            // 判断长度是否越界
            for (int j = 1; j < str_len; j++)  // 依次判断所有字符串是否越界
            {
                if (i >= strs[j].size())  // 是否越界
                {
                    return com_str;
                }
            } 
            // 不越界,则判断其他字符串的字符是否和第一个字符串的字符相等
            for (int j = 1; j < str_len; j++)
            {
                if (strs[0][i] != strs[j][i])
                {
                    return com_str;
                }
            }
            // 不越界,且都相等
            com_str += strs[0][i];
        }
        return com_str;

    }
};

python代码:

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        strs_len = len(strs)
        if strs_len == 1: return strs[0]

        # 依次和第一个字符串的所有字符比较。
        com_str = ""
        for i in range(len(strs[0])):  # 遍历第一个字符串的所有字符
            # 其他字符串是否越界
            for j in range(strs_len):  # 依次遍历其他字符串
                if i >= len(strs[j]):   
                    return com_str
            # 其他字符串的当前字符是否相等
            for j in range(strs_len):
                if strs[0][i] != strs[j][i]:
                    return com_str
            # 其他字符串的不越界,且当前字符相等,则拼接
            com_str = com_str + strs[0][i]
        return com_str

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值