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

思路是:先考虑是否存在字符串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
思路更加简单易懂,代码更加简洁
497

被折叠的 条评论
为什么被折叠?



