Longest Common Prefix

来源:互联网 发布:网络浪涌保护器 编辑:程序博客网 时间:2024/06/05 16:47

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

解法一:
巧妙运用zip函数

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)

如以[‘ascd’,’ascdd’,’asefd’]做测试,zip(strs)返回的结果为:
[(‘ascd’,), (‘ascdd’,), (‘asefd’,)]
为了将字符分开,我们使用zip(*strs)
[(‘a’, ‘a’, ‘a’), (’s’, ‘s’, ‘s’), (‘c’, ‘c’, ‘e’), (‘d’, ‘d’, ‘f’)]
然后对不重复字符计数即可。
解法二:
reduce()函数巧妙应用。

class Solution:    def lcp(self, str1, str2):        i = 0        while (i < len(str1) and i < len(str2)):            if str1[i] == str2[i]:                i = i+1            else:                break        return str1[:i]    # @return a string                                                                                                                                                              def longestCommonPrefix(self, strs):        if not strs:            return ''        else:            return reduce(self.lcp,strs)

reduce()函数接收的参数和 map()类似,一个函数 f,一个list,对list的每个元素反复调用函数f,并返回最终结果值。
此例中对每两个字符串进行公共前缀提取,得到的结果与下一个字符串进行同样操作,得到所有字符串的最长公共前缀。

0 0
原创粉丝点击