最长公共前缀

Question: 最长公共前缀

👉LeetCode链接👈

Write a function to find the longest common prefix string amongst an array of strings.

在一个以字符串为元素的列表中,寻找这些字符串的最长公共前缀

Example

1
2
给定列表['asdfrasfda', 'asdfasdf', 'asdfghdfgh']
返回值应该是 `asdf`

Answer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def longestCommonPrefix(strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
# zip(*strs) 将strs生成一个二维矩阵,
# 也就是相当于将 strs 中的所有元素按最短的一个的长度截取
# 然后取每一个元素的相同位置的字符,放入到一个新的元组里
# 再使用 set 去重,
# 如果这个列表里面的所有字符串第一个位置都相同的话就会被去重只剩下一个相同的元素
# 最后再循环将这个列表,当取到的值的长度大于 1,
# 也就是去重后还有一个以上的元素,就证明到这个位置已经没有公共字符了
# 没有公共字符时返回strs中任意一个元素(代码中假定为0位置的元素)的[:i]长度的切片
# 如果去重后的列表中所有的元素的长度都是1
# 那就意味着 strs 列表中最短的那个元素就是公共字符串
for i, letter_group in enumerate(map(set, zip(*strs))):
print(i, letter_group)
if len(letter_group) > 1:
return strs[0][:i]
else:
return min(strs)

Finally

思路都在上面代码注释中

我是个初学渣渣,如果有大神发现我的代码中有什么问题的话希望能够随时指正,我一定会虚心接受的。

我的邮箱:rayson951005@gmail.com