思路
利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ''
if len(strs) == 1:
return strs[0]
s1 = min(strs)
s2 = max(strs)
for i, v in enumerate(s1):
if v != s2[i]:
return s2[:i]
return s1
正常两种解法
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
n = len(strs)
if n == 1:
return strs[0]
# 公共前缀比所有字符串都短,随便选一个
min_s = strs[0]
# 法一:不断缩短公共前缀
for s in strs:
while s[:len(min_s)] != min_s:
if len(min_s) == 0:
return ""
# 公共前缀不匹配,就让它变短
min_s = min_s[:len(min_s) - 1]
# 法二:不断增加公共前缀,不匹配直接返回前一个位置
# for i in range(len(min_s)):
# for s in strs:
# if s[:i+1] != min_s[:i+1]:
# if i == 0:
# return ""
# else:
# return min_s[:i]
return min_s