题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
考点
- 根据列表中的字符串长度排序
- 两层for循环的使用,for|else的使用
算法1
从下标0开始,判断每一个字符串同一索引所对应的值,判断是否全部相同。直到遇到不全部相同的时候return。
由于提供的单词长度不同,应该以最小单词为基准进行比较,如["flower","flow","flight"]中应该以flow来和剩下的单词一一对比。
- 所有单词同一索引所对应的值相等,则更新最长公共前缀
- 有一个单词与其他单词同一索引所对应的值不相等,则返回最后更新的最长公共前缀
代码1
def longestCommonPrefix(strs): """ :type strs: List[str] :rtype: str """ strs.sort(key =len)# 根据列表中的字符串长度排序 if not strs: return '' result = ''#记录公共前缀 for i in range(len(strs[0])):#以列表中长度最小的单词为基准进行遍历 for j in strs:#遍历列表中的每个字符串 if j[i] != strs[0][i]:#如果列表中的字符串的对应下标是否相同 return result else: result += strs[0][i]#如果所有字符串下标都相同,更新最长公共前缀 return result print(longestCommonPrefix([""]))
算法2
利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb,aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀
代码2
def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ s1 = min(strs) s2 = max(strs) for i,x in enumerate(s1): if x != s2[i]: return s2[:i] return s1