Leetcode - 14. 最长公共前缀

Github地址

思路

分析了一下题目

思路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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yexiaomola

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值