LeetCode14. 最长公共前缀

14. 最长公共前缀

描述

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

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

示例

示例 1:

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

示例 2:

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

说明:

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

思路

首先考虑特殊情况,即列表中没有字符串或者只有一个字符串。

列表中最长的相同前缀就是列表中最短的那个字符串的长度。

从头开始匹配,关键是停止遍历的条件:不再相同,此时就可以直接返回。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        # 特殊情况:没有字符串/有一个字符串
        if len(strs) == 0:
            return ""

        if len(strs) == 1:
            return strs[0]

        len_strs = len(strs)
        # 最大长度为所有字符串中长度最短的那个
        max_len_prefix = min([len(str) for str in strs])

        for idx_pre in range(0, max_len_prefix):
            for idx_strs in range(1, len_strs):
                if strs[0][idx_pre] != strs[idx_strs][idx_pre]:
                    return strs[0][:idx_pre]

        # 如果在for中没返回,则最长的前缀长度就为max_len_prefix
        return strs[0][:max_len_prefix]

GitHub地址:https://github.com/protea-ban/LeetCode

posted @ 2018-09-17 15:02  banshaohuan  阅读(141)  评论(0编辑  收藏  举报