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
        
posted @ 2018-06-04 21:05  南邮果粒橙  阅读(249)  评论(0编辑  收藏  举报