14.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路1:
取列表中第一个字符串s0,遍历后序字符串,看s0与字符串相同的最长前缀是多少。
程序代码1:
class Solution:
def longestCommonPrefix(self, strs):
if not strs:
return ""
res = strs[0]
i = 1
while i < len(strs):
while strs[i].find(res) != 0:
res = res[0:len(res)-1]
i += 1
return res
s = Solution()
print(s.longestCommonPrefix(['abb','aba','abca']))
解题思路2:
利用python的max()和min()函数,按照ascII值排序,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀。
程序代码2:
class Solution:
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
s = Solution()
print(s.longestCommonPrefix(['abb','aba','abca']))
解题思路3:
利用python中的zip()函数,取列表上每个字符串上每一个位的字母,比较同一位置上的字母是否相同来计算最长的公共前缀。
程序代码3:
class Solution:
def longestCommonPrefix(self, strs):
res = ""
for tmp in zip(*strs):
print(tmp)
tmp_set = set(tmp)
print(tmp_set)
if len(tmp_set) == 1:
res += tmp[0]
else:
break
return res
s = Solution()
print(s.longestCommonPrefix(['abb','aba','abca']))