012-力扣刷题14--最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

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

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

所有输入只包含小写字母 a-z 。 第一个解决方案

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs: #如果这个strs是空那么就返回的是""
            return ""
        for i in range(len(strs[0])):  #选第一个单词作为一个标杆,最长也不会比这个单词更长,对这个单词的每一个字符进行遍历
            for string in strs[1:]: #拿所有的后面的字符串每一个字符跟跟第一个字符串的同样位置的字符进行比较
                if i >= len(string)  or string[i] != strs[0][i]:  #如果取出的每个字符串的第i个位置的字符不相同那么就返回相同的字符串就可以了
                    return strs[0][:i]  #取不到i位置的字符
        return strs[0]   #如果strs=[""] ,那么我们就直接返回第一个元素就好了

第二个解决方案:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """

        result = ""
        i=0
        while True:
            try:
                sets = set(string[i] for string in strs)  #这个set的作用返回所有字符串同样位置是否相同,如果相同的话那么就返回这个相同的字符,不同的话就是空
                if len(sets) == 1:
                    result += sets.pop()#将符合条件的字符添加到我们的result中
                    i += 1
                else:  #否的话那么就说明没有相同的字符了,停止循环
                    break
            except Exception as e:  #出现异常的话直接跳出循环
                break
        return result #最后返回result就好了