LeetCode#14 最长公共前缀

献上我的做题方法和思路。

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        common = ''
        time = 0
        len_list = []       
        if not strs:                          #如果没有单词则返回‘’,我也是提交过一次后才发现要写这个的
            return common
        for x in strs:
            len_list.append(len(x)) 
        min_len = min(len_list)                             #找到最小的单词长度
        while time < min_len:
            same = []
            first = True
            for single in strs:
                # print(single[time])
                if first or (single[time] == same[0]):    #插入的条件为:第一次插入或是相同元素
                    same.append(single[time])
                    first= False
            if (len(same) != len(strs)):            #如果有不同元素的话,列表的长度就等于单词总个数
                break
            else:
                common +=  single[time]    #如果每个单词的第i个元素都相同则加上这个元素
            time += 1
        return common
class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if strs == []:
            return ''
        for i in range(len(strs[0])):
            for str in strs:
                if len(str) <= i or str[i] != strs[0][i]:
##### 条件一:若一是最长的则i会一直变大,达到出现判断第一个单词的第i个字母发现有单词长度小于i时,则前面i个单词都是公共前缀。
##### 条件二:如果当前这个单词的第i个元素和第一个单词的第i个元素不同则前i个元素是公共前缀
                    return strs[0][:i]
        return strs[0]
##### 若全部都一样,则第一个所有元素都是公共前缀

这个方法是大神写的,只用时28ms的,使用到了itertools库,很简便也很快捷。记录在这,学习一下。

from itertools import izip
class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        r = ''
        for letters in izip(*strs):
            com_prefix = set(letters)
            if len(com_prefix) != 1:
                return r
            r += com_prefix.pop()
        return r
        

猜你喜欢

转载自www.cnblogs.com/nymrli/p/9135569.html
今日推荐