14. Longest Common Prefix

Problem

Write a function to find the longest common prefix string amongst an array of strings.

在一个字符串组成的列表里,查找通用的前缀

Solution

原思路需要考虑情况比较多

  • 最短元素不止一个,直接使用最短元素比较行不通(通用前缀可能不存在);
tmp = map(len,strs)
minstr = strs[tmp.index(min(tmp))]

["a","b"]
["abab","aba","abc"]

  • 最长元素不止一个,["flower","flow","flight"], 不同最长元素值不同
  1. 判断空列表
  2. 判断列表中存在空元素
  3. 对每个元素进行切片,切片长度以最短元素长递减,每次切片后变更为set,判断元素数量,数量为1,则为所求前缀;数量为0/切到最后,无通用前缀
class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if 0 == len(set(strs)):   # if not strs
            return ''
        tmp = map(len,strs)
        minlen = min(tmp)   # int length
        if 0 == minlen:
            return ''
        strs = [ x[:minlen] for x in strs]
        for x in range(minlen):
            if 1 == len(set(strs)):
                return strs[0]
            strs = [ x[:-1] for x in strs]
        return ''

Discuss Solution

  • strs = ["aac","ab",'addd']
  • zip(*strs)
  • [('a', 'a', 'a'), ('a', 'b', 'd')]
class Solution:
    # @return a string
    def longestCommonPrefix(self, strs):
        if not strs:    #处理空列表的情况
            return ""
            
        for i, letter_group in enumerate(zip(*strs)):
            if len(set(letter_group)) > 1:
                return strs[0][:i]
        else:   #处理含有''元素的情况
            return min(strs)
posted @ 2016-09-27 21:14  Salmd  阅读(117)  评论(0)    收藏  举报