LeetCode算法题14:最长公共前缀解析

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例1:

输入: ["flower","flow","flight"]
输出: "fl"

示例2:

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

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

这个题很有意思,我只想到了暴力法,而且我觉得在没有一些工具的情况下只能用暴力法。但是我一开始写的程序全是问题,最后通过的时候已经有接近40行代码了,这样的代码自己都觉得恶心,于是网上搜索了一下,思路都是一样的,但是人家的代码确实要比我的好很多。。。。。
这个程序的思路的话,就是遍历每一个字符串的每一个元素,遍历的方法有些不同,每次需要对所有的字符串的某一个位置的元素进行对比。所以干脆就拿出第一个字符串的元素对比就可以。另外还要注意的是需要判断字符串为空的情况。
C++源代码:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.empty()) return "";
        for(int i=0;i<strs[0].size();++i){
            for(int j=1;j<strs.size();++j){
                if(strs[j][i]!=strs[0][i]) return strs[0].substr(0,i);
            }
        }
        return strs[0];
    }
};

对于python而言,有一个非常好用的工具叫做zip,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
因此,zip可以自动把所有字符串的每个元素放到一起,而且可以选出最短的进行对齐。
python3源代码:

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        result = ''
        for item in zip(*strs):
            if len(set(item)) > 1:
                return result
            else:
                result += item[0]
        return result

你可能感兴趣的:(Leetcode算法题分析)