题目
Write a function to find the longest common prefix string amongst an array of strings.
即找出输入字符串数组中的最长公共前缀。如:
输入:[‘abc’,’abd’,’abe’]
输出:’ab’
思路
对数组中各字符串的每一位进行对比
解法 1
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
#若字符串无内容返回空
if not strs:
return ""
#zip是将各字符串每一位打包,如zip('abc','abd','abe')为['a','a','a']['b','b','b'] ['c','d','e']
#*strs等同于将数组中各字符串分别输入,如*strs='abc','abd','abe'
#set(['a','a','a'])='a',set(['a','b','a'])='a''b'
for i, letter_group in enumerate(zip(*strs)):
if len(set(letter_group)) > 1:
return strs[0][:i]
else:
return min(strs)
解法 2
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
# 找到数组中最短的字符串
shortest = min(strs,key=len)
# 将数组中其他字符串与最短字符转诸位对比
# 若有某位不同,则返回最短字符串到该位的内容
# 若全部相同,则返回最短字符串的所有内容
for i, ch in enumerate(shortest):
for other in strs:
if other[i] != ch:
return shortest[:i]
return shortest
本文介绍了一种算法问题——寻找一组字符串中的最长公共前缀,并提供了两种解决方案:一种利用zip和set来比较字符串中每个位置的字符是否一致;另一种通过找到最短字符串并逐个字符与其它字符串比较的方法。

183

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



