博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode--014--最长公共前缀
阅读量:6537 次
发布时间:2019-06-24

本文共 2249 字,大约阅读时间需要 7 分钟。

问题描述:

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

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

示例 1:

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

示例 2:

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

说明:

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

方法1:

  贪心:将第一个串和第二个串进行比较,得出的最长前缀再与剩下的进行比较。(48ms)

1 class Solution(object): 2     def longestCommonPrefix(self, strs): 3         """ 4         :type strs: List[str] 5         :rtype: str 6         """ 7         if len(strs)>1: 8              9             s0 = strs[0]10             s1 = strs[1]11         elif len(strs) == 1:12             return strs[0]13         else:14             return ""15         common = ""16         flag = True17         i = 018         while flag and i < len(s0) and i < len(s1):19             if s0[i] == s1[i]:20                 common += s0[i]21             else:22                 flag = False23             i += 124         for i in range (2,len(strs)):25             c = strs[i]26             j = 027             common2 = ""28             while j < len(c) and j < len(common):29                 if c[j] == common[j]:30                     common2 += c[j]31                     j += 132                 else:33                     break34             common = common235         return common

方法2(官方):

  利用min和max函数,找出List中最小值元素s1和最大值元素s2,纪录s1中和s2字符不相同时候的下标,进行截断处理。(24ms)

1 if not len(strs):2   return ''3 s1 = min(strs)4 s2 = max(strs)5 for n, s in enumerate(s1):6   if not s2[n] == s:7       return s1[:n]8 return s1

注:enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']>>> list(enumerate(seasons))[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]>>> list(enumerate(seasons, start=1))       # 小标从 1 开始[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
>>>seq = ['one', 'two', 'three']>>> for i, element in enumerate(seq):...     print i, element... 0 one1 two2 three

方法3:

1         ans = ""2         3         for i in zip(*strs):4             if  len(set(i)) > 1:5                 return ans6             ans += i[0]7         8         return ans9

strs=["flower","flgdcvghyf","fove"]for i in zip(*strs):     print(i)>>('f','f','f')('l','l','o')('o','g','v')('w','d','e')

 

 

2018-07-22 11:18:24

转载于:https://www.cnblogs.com/NPC-assange/p/9349591.html

你可能感兴趣的文章
linux 学习(二)防火墙
查看>>
android - SpannableString或SpannableStringBuilder以及string.xml文件中的整型和string型代替...
查看>>
三端稳压器各个参数解释
查看>>
算法(Algorithms)第4版 练习 1.3.14
查看>>
内部类
查看>>
高速数论变换(NTT)
查看>>
Springmvc的跳转方式
查看>>
加密原理介绍,代码实现DES、AES、RSA、Base64、MD5
查看>>
LINUX中常用操作命令
查看>>
python 获取进程pid号
查看>>
洛谷.4180.[模板]次小生成树Tree(Kruskal LCA 倍增)
查看>>
TCL函数“参数自动补全” 与 “help 信息显示”
查看>>
Linux软中断、tasklet和工作队列
查看>>
Asp.Net Core 轻松学-利用日志监视进行服务遥测
查看>>
有向图的拓扑排序算法JAVA实现
查看>>
jenkins2 multibranch
查看>>
am335x 电容屏驱动添加。
查看>>
rhel-server-7.2-x86_64无法联网(VMware环境)
查看>>
Nginx配置中的log_format用法梳理(设置详细的日志格式)
查看>>
优化LibreOffice如此简单
查看>>