当前位置: 首页 > news >正文

LeetCode--014--最长公共前缀

问题描述:

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

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

示例 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 = True
17         i = 0
18         while flag and i < len(s0) and i < len(s1):
19             if s0[i] == s1[i]:
20                 common += s0[i]
21             else:
22                 flag = False
23             i += 1
24         for i in range (2,len(strs)):
25             c = strs[i]
26             j = 0
27             common2 = ""
28             while j < len(c) and j < len(common):
29                 if c[j] == common[j]:
30                     common2 += c[j]
31                     j += 1
32                 else:
33                     break
34             common = common2
35         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 one
1 two
2 three

方法3:

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

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

相关文章:

  • 串口超时处理原理及实现
  • ACM北大暑期课培训第一天
  • Delphi窗体创建释放过程及单元文件小结(转)
  • Linux部署zabbix3.4 结合钉钉智能报警
  • 学生分数排序
  • zabbix3.4上简单web监测功能测试
  • linux系统man查询命令等级与意义
  • 关于ES6的Promise的使用深入理解
  • P1065 津津的储蓄计划
  • 2018年 7月总结8月计划
  • Proteus仿真_01、 8086 IO译码仿真
  • CentOS 7之Postfix部署系列 (二) CentOS网络设置
  • AJAX PHP 请求实例
  • 使用Formik轻松开发更高质量的React表单(二)使用指南
  • HDU-3874 Necklace 线段树+离线
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • FineReport中如何实现自动滚屏效果
  • IndexedDB
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript 奇技淫巧
  • JavaScript对象详解
  • node.js
  • Promise初体验
  • Python语法速览与机器学习开发环境搭建
  • Spring Cloud Feign的两种使用姿势
  • 安卓应用性能调试和优化经验分享
  • 关于 Cirru Editor 存储格式
  • 计算机常识 - 收藏集 - 掘金
  • 你真的知道 == 和 equals 的区别吗?
  • 如何设计一个比特币钱包服务
  • 问题之ssh中Host key verification failed的解决
  • HanLP分词命名实体提取详解
  • 阿里云ACE认证之理解CDN技术
  • 从如何停掉 Promise 链说起
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (C语言)字符分类函数
  • (第27天)Oracle 数据泵转换分区表
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (五)IO流之ByteArrayInput/OutputStream
  • (五)网络优化与超参数选择--九五小庞
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 项目指定SDK版本
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net6使用WebSocket与前端进行通信
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • /var/lib/dpkg/lock 锁定问题
  • @test注解_Spring 自定义注解你了解过吗?
  • [ IO.File ] FileSystemWatcher
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [C#] 如何调用Python脚本程序
  • [C++进阶篇]STL中vector的使用