23/300
- 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
特殊情况:strs = [],
又遇上空列表了,下次刷题,不管三七二十一,先把判断写上。
思路是先排好了,然后比第一个和最后一个,如果俩不一样,那整串肯定也都不一样。
class Solution:
def longestCommonPrefix_01(self, strs: List[str]) -> str:
if not strs: return ''
prefix = ''
#strs.sort()
#first = strs[0]
#last = strs[len(strs)-1]
#后来查了一下,用min()和max()来比string是可以的:
first = min(strs)
last = max(strs)
if len(first) > len(last):
first, last = last, first
for i in range(len(first)):
if first[i] == last[i]:
prefix += first[i]
else:
break
return prefix
def longestCommonPrefix_02(self, strs: List[str]) -> str:
if not strs: return ''
first = min(strs)
last = max(strs)
for i, char in enumerate(first):
if char != last[i]: #到不同就停止
return last[:i]
return first #如果是本身
看到大佬用zip()和set()弄的,不用还真是想不到:
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
prefix = ''
for i in zip(*strs):
set_i = set(i)
if len(set_i) == 1:
prefix += i[0]
else:
break
return prefix