14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""

示例 1:

输入: [“flower”,”flow”,”flight”]
输出: “fl”

示例 2:

输入: [“dog”,”racecar”,”car”]
输出: “”
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z

方法一:

  1. class Solution:
  2. def longestCommonPrefix(self, strs: List[str]) -> str:
  3. if not strs:
  4. return ""
  5. str1 = strs[0]
  6. for i in range(1, len(strs)):
  7. str1 = self.lcp(str1, strs[i])
  8. if str1 == None:
  9. break
  10. return str1
  11. def lcp(self, str1, str2):
  12. length, i = min(len(str1), len(str2)), 0
  13. while i<length and str1[i] == str2[i]:
  14. i+=1
  15. return str1[:i]

方法二:

利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀。

  1. def longestCommonPrefix(self, strs):
  2. if not strs: return ""
  3. s1 = min(strs)
  4. s2 = max(strs)
  5. for i,x in enumerate(s1):
  6. if x != s2[i]:
  7. return s2[:i]
  8. return s1