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

xiaoxiao2022-06-11  69

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例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
转载请注明原文地址: https://www.6miu.com/read-4930429.html

最新回复(0)