Leetcode——14.最长公共前缀(python)

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']))

你可能感兴趣的:(Leetcode——14.最长公共前缀(python))