编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
第一种方法,把str看成list而strs看成二维数组,ss可以得到每个str的每一位的元组去重后的序列
若输入为['abb', 'aba', 'baa']则ss为[(b, a),(b, a),(b, a)]由此可知没有公共前缀。
def longestCommonPrefix(strs):
if not strs:
return ""
ss = list(map(set, zip(*strs)))
res = ""
for i, x in enumerate(ss):
x = list(x)
if len(x) > 1:
break
res = res + x[0]
return res
第二种方法将字符串按ascii排序,得到最小的和最大的字符串,比较每一位即可得到最后的答案。
def longestCommonPrefix(strs):
if not strs:
return ""
s1 = min(strs)
s2 = max(strs)
for i, x in enumerate(s1):
if x != s2[i]:
return s2[:i]
return s1