天天看点

Leetcode - 14. 最长公共前缀

Github地址

文章目录

    • 思路
      • 思路1: 横向扫描法
      • 思路2: 利用Python中zip函数和set
      • 思路3: 利用ASCII码
    • 编写

思路

分析了一下题目

思路1: 横向扫描法

  • ①把第一个字符串暂时看做最长公共前缀
  • ②在第二个字符串看是否能找到当前最长公共前缀
  • ③如果不能找到,将最长公共前缀去掉最后一个,再进行②,
  • ④直至匹配成功
  • ⑤再循环后面的每个元素,总能找到最长公共前缀,如果中间最长公共前缀为空,直接GG

思路2: 利用Python中zip函数和set

  • ①评论区学到的,利用zip函数
  • ② 将数组中所有的字符串进行元组化
  • ③元组化后,再对每个元组进行set, 就可以看成一个字符串的一个字符
  • ④如果set后,长度为 1, 那么就说明这个数组中每个字符串当前位置的字符都相等

思路3: 利用ASCII码

—待补充

编写

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        strsLen = len(strs)
        if(strsLen <= 0): return ''
        ans = strs[0]
        for i in range(1, strsLen):
            while(strs[i].find(ans) != 0):
                ans = ans[:-1]
                if(ans == ''):
                    return ''
        return ans
     # 只需要找到最长字符串,最短字符串两者进行比较
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs: return ""
        s1 = min(strs)
        s2 = max(strs)
        for i,x in enumerate(s1):
            if x != s2[i]:
                return s2[:i]
        return s1
    # 评论区学到的,利用zip函数
    # 将数组中所有的字符串进行元组化
    # 元组化后,再对每个元组进行set, 就可以看成一个字符串的一个字符
    # 如果set后,长度为 1, 那么就说明这个数组中每个字符串当前位置的字符都相等
    def longestCommonPrefix(self, strs):
        prefix = []
        for t in zip(*strs):
            s = set(t)
            if(len(s) == 1):
                prefix.append(s.pop())
            else:
                break
        return "".join(prefix)