# encoding=utf-8 """ 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明: 所有输入只包含小写字母 a-z 。 """ """ 算法: 处理特例:列表为空 首先按照字符串长度升序排列 遍历第一个字符串的每个字符, 如果后面的每个字符串同一位置的字符相同,则添加到res; 否则return 复杂度分析: 时间复杂度:O(S),S 是所有字符串中字符数量的总和。 最坏的情况下,n 个字符串都是相同的。算法会将str0与其他字符串都做一次比较。这样就会进行S次字符比较。 空间复杂度:O(1),我们只需要使用常数级别的额外空间。 """ class Solution(object): def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ if not strs: return '' # 定义结果list res = [] # 按字符串长度排序,取第一个最短的字符串为标准 strs.sort(key = len) str0_len = len(strs[0]) for each_letter_idx in range(str0_len): # 遍历排序后的strs的第一个字符串的每个字符, for each_str in strs[1:]: # 遍历strs第一到最后一个字符串 if strs[0][each_letter_idx] != each_str[each_letter_idx]: # 如果不相等,则退出循环,返回结果 return "".join(res) else: continue # 如果后面的每个字符串同一位置的字符相同,则添加到res; res.append(strs[0][each_letter_idx]) # 返回结果字符串 return "".join(res) s = Solution() print(s.longestCommonPrefix(["flower","flow","flight"])) print(s.longestCommonPrefix(["dog","racecar","car"])) print(s.longestCommonPrefix([])) print(s.longestCommonPrefix([""])) print(s.longestCommonPrefix(["aca", "cba"])) print(s.longestCommonPrefix(["aca", "aba"]))
Leetcode27最长公共前缀
最新推荐文章于 2024-11-04 00:45:00 发布