力扣刷题(python)50天——第八天:最长公共前缀

力扣刷题(python)50天——第八天:最长公共前缀

题目描述

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 “”。

示例 1:

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法

逐一检索每项字符串的相同位置的项,遇到不同时直接返回循环结束,相同则添加到公共项。

解答

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if strs==[]:
            return ''
        l=len(strs[0])
        both=''
        for each in strs:
            l=min(l,len(each))
        for i in range(l):
            flag=True
            for each in strs:
                if each[i]!=strs[0][i]:
                    flag=False
                    break
            if flag:
                both+=strs[0][i]
            else:
                break
        return both
        return v

执行结果

力扣刷题(python)50天——第八天:最长公共前缀_第1张图片

改进建议:
利用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

另外有一种错误思路:可以比较最长和最短的字符串来得到公共子串,这样没有考虑其他子串,与上述方法完全不一样。

你可能感兴趣的:(leetcode刷题,python,力扣,最长公共前缀,leetcode,字符串公共部分查找)