塞进裤子ヾ(≧O≦)〃嗷~

0%

leetcode-14最长公共前缀

最初想法:
读取第一个字符串中的第1个字符,与剩余的字符串比较第1个字符;

。。。

读取第一个字符串中的第i个字符,与剩余的字符串比较第i个字符;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def longestCommonPrefix(strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs) == 0:
return ""
allstr = ""#最长公共前缀
for i in range(len(strs[0])):
for mystr in strs[1: ]:
if len(mystr)==i or strs[0][i] != mystr[i]:
return allstr
allstr += strs[0][i]
return allstr

使用zip获取每个字符串的同一位置的字母:

1
2
3
4
5
6
7
8
9
10
11
def longestCommonPrefix(strs):
if len(strs) == 0:
return ""
allstr = ""
zipped = zip(*strs) #*list表示将list解包,
for i in zipped:
if len(set(i)) == 1: #说明没有不同元素
allstr += i[0]
else:
break
return allstr

注意*list的使用

http://sbaban.com/Python%E8%A3%85%E9%A5%B0%E5%99%A8.html

先将字符串排序,然后比较第一个和最后一个元素有多少相同的字符就行

1
2
3
4
5
6
7
8
9
10
11
12
def longestCommonPrefix(strs):
n = len(strs)
if n==0:
return ""
strs.sort() #按字母排序
allstr = ""
for i in range(len(strs[0])):
if i<len(strs[n-1]) and strs[0][i] == strs[n-1][i]:
allstr += strs[0][i]
else:
break
return allstr
if help:小手一抖点个广告 or 大手一挥资助一下