LeetCode题四:最长公共前缀

清明节休息完毕,做两道题收收心:

思路是:先考虑是否存在字符串strs,如果不存在即为空;

我先通过使用min函数key=len参数希望找出最短的字符串,再利用双重循环先将索引i与字符char遍历,再通过一层索引others比较当前字符i的位置是否和当前others[i]的字符是否一样,如果不一样输出之前的最小字符串,都一样就说明是相同的字符组;

代码执行用时较快,但是消耗内存较多 

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        # 检查输入的字符串列表是否为空
        # 如果为空,说明没有字符串可供比较,直接返回空字符串
        if not strs:
            return ""
        # 使用 min 函数结合 key=len 参数找出列表中最短的字符串
        # 因为公共前缀的长度不会超过最短字符串的长度
        shortest_str = min(strs, key=len)
        # 遍历最短字符串的每个字符,同时获取字符的索引
        for i, char in enumerate(shortest_str):
            # 遍历输入字符串列表中的每个字符串
            for other in strs:
                # 检查当前字符串在索引 i 位置的字符是否与最短字符串在该位置的字符相同
                # 如果不同,说明公共前缀到此为止
                if other[i] != char:
                    # 返回最短字符串从开头到索引 i(不包含 i)的部分
                    return shortest_str[:i]
        # 如果遍历完最短字符串的所有字符都没有发现不同,说明最短字符串本身就是公共前缀
        return shortest_str
    

下面是大佬的算法:

取一个单词s,和后面单词进行比较看最长前缀是多少,遍历所有单词:
 

class Solution:
    def longestCommonPrefix(self, s: list[str]) -> str:
        # 检查输入的字符串列表是否为空
        # 如果为空,说明没有字符串可供比较,直接返回空字符串
        if not s:
            return ""
        # 初始化结果为列表中的第一个字符串
        # 因为公共前缀一定是某个字符串的起始部分,先假设第一个字符串就是公共前缀
        res = s[0]
        # 初始化索引 i 为 1,用于遍历列表中除第一个字符串之外的其他字符串
        i = 1
        # 开始遍历列表中除第一个字符串之外的其他字符串
        while i < len(s):
            # 当当前字符串 s[i] 不以 res 开头时
            # 使用 find 方法查找 res 在 s[i] 中的位置,如果不是 0 则说明 res 不是 s[i] 的前缀
            while s[i].find(res) != 0:
                # 不断缩短 res 的长度,去掉最后一个字符
                # 逐步尝试找到 s[i] 和 res 的公共前缀
                res = res[0:len(res)-1]
            # 处理完当前字符串后,将索引 i 加 1,继续处理下一个字符串
            i += 1
        # 遍历完所有字符串后,res 即为最长公共前缀,将其返回
        return res

思路更加简单易懂,代码更加简洁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值