编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
各种考虑不全,提交了好多次。
执行用时 : 56 ms, 在Longest Common Prefix的Python3提交中击败了71.73%的用户
内存消耗 : 13.1 MB, 在Longest Common Prefix的Python3提交中击败了92.30% 的用户
class Solution:
def longestCommonPrefix(self, strs):
res = ""
if not strs:
return ""
if len(strs) == 1 and len(strs[0])!=0:
return strs[0][0]
else:
minlen = min(strs,key=len)
strs.remove(minlen)
#print(strs)
for i in range(len(minlen)):
tmp = []
for j in strs:
tmp.append(j[i])
flag = list(set(tmp))
if len(flag) == 1:
if minlen[i] == flag[0]:
res += minlen[i]
else:
break
else:
break
return res
s = Solution()
res = s.longestCommonPrefix(["flower","flow","flight"])
print(res)
思路二:https://leetcode-cn.com/problems/longest-common-prefix/comments/38495
利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀。
def longestCommonPrefix(self, 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