LeetCode 14. 最长公共前缀
2023-04-18 14:53:47 时间
-
难度:简单
-
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路1
可以简化为2个字符串求交集,然后用结果去对余下的所有的字符串依次求解,有个递归的过程。
对2个字符串求交集,先算出来长度小的那个字符串,对其遍历,返回公共部分,没有就返回空串。
注意点
1. 如果长度为0就返回空
2. 如果长度为1,就返回唯一的字符串
3. 如果长度超过2,那么就比较,用reduce反复求
参考代码1
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if len(strs)==0:return ""
if len(strs)==1:return strs[0]
else:
def shortString(s1,s2):
"""这个函数的目的就是返回2个字符串的公共部分"""
result = ""
for i in range(len(s1)):
if not s2.startswith(s1[:i+1]):
break
else:
result = s1[:i+1]
return result
from functools import reduce
return reduce(shortString,strs)
-
分析
效率肯定是比较差的,明显多做了很多事情,比如比较到第一个第二个的时候如果就错了,那根本无需做下去。
垂直扫描法
可以把列表中的字符串纵向对比,依次比较每个字符串的第一位,如果都一样就做下一个,否则就退出。
["flower","flow","flight"]
竖着排
flower
flow
flight
怎么比较是否一样呢,利用zip函数竖排得到tuple,再转换set如果长度为1就是一样。
参考代码2
class Solution:
def longestCommonPrefix(self, strs: list) -> str:
if len(strs)==0:return ""
if len(strs)==1:return strs[0]
zip_strs = zip(*strs)
result = ""
for i in zip_strs:
if len(set(i))==1:
result = result + i[0]
else:
break
return result
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击