前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 最长公共前缀 5种解法

python 最长公共前缀 5种解法

作者头像
编程小白狼
发布于 2024-12-31 00:12:26
发布于 2024-12-31 00:12:26
19300
代码可运行
举报
文章被收录于专栏:编程小白狼编程小白狼
运行总次数:0
代码可运行

解法一:水平扫描 这是最简单的一种方法,逐个字符比较每个字符串的相应位置,直到遇到不匹配的字符为止。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def longest_common_prefix(strs):
    if not strs:
        return ""
    prefix = strs[0]
    for i in range(1, len(strs)):
        while strs[i].find(prefix) != 0:
            prefix = prefix[:-1]
            if not prefix:
                return ""
    return prefix

解法二:垂直扫描 在解法一中,我们对每个字符串进行了多次查找操作。为了优化性能,可以将查找操作转换为比较每个字符串的相同索引位置的字符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def longest_common_prefix(strs):
    if not strs:
        return ""
    for i in range(len(strs[0])):
        char = strs[0][i]
        for string in strs[1:]:
            if i >= len(string) or string[i] != char:
                return strs[0][:i]
    return strs[0]

解法三:分治法 将问题分解为更小的子问题,然后递归求解。将字符串数组拆分为两半,分别找出左半部分和右半部分的最长公共前缀,再将两者的最长公共前缀合并。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def longest_common_prefix(strs):
    if not strs:
        return ""
    return divide_conquer(strs, 0, len(strs) - 1)

def divide_conquer(strs, left, right):
    if left == right:
        return strs[left]
    else:
        mid = (left + right) // 2
        lcp_left = divide_conquer(strs, left, mid)
        lcp_right = divide_conquer(strs, mid + 1, right)
        return common_prefix(lcp_left, lcp_right)

def common_prefix(left, right):
    min_len = min(len(left), len(right))
    for i in range(min_len):
        if left[i] != right[i]:
            return left[:i]
    return left[:min_len]

解法四:二分查找 将问题转化为寻找最短字符串的最长公共前缀。通过二分查找的方式,每次找到中间长度,判断最短字符串的前半部分是否为所有字符串的公共前缀,如果是,则最长公共前缀一定在后半部分,否则在前半部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def longest_common_prefix(strs):
    if not strs:
        return ""
    min_len = min(len(string) for string in strs)
    low, high = 0, min_len
    while low < high:
        mid = (low + high + 1) // 2
        if is_common_prefix(strs, mid):
            low = mid
        else:
            high = mid - 1
    return strs[0][:low]

def is_common_prefix(strs, length):
    prefix = strs[0][:length]
    for string in strs:
        if not string.startswith(prefix):
            return False
    return True

解法五:字典树(Trie) 使用字典树存储字符串,从根节点开始遍历,直到找到第一个非公共前缀的节点,返回路径上的字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TrieNode:
    def __init__(self):
        self.children = {}
        self.is_end = False

def longest_common_prefix(strs):
    if not strs:
        return ""
    root = TrieNode()
    for string in strs:
        node = root
        for char in string:
            if char not in node.children:
                node.children[char] = TrieNode()
            node = node.children[char]
        node.is_end = True
    prefix = ""
    while root and not root.is_end:
        if len(root.children) == 1:
            char, child = root.children.popitem()
            prefix += char
            root = child
        else:
            break
    return prefix
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
MongoDB 常用
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4O4
2022/04/25
3110
MongoDB数据库的基本使用总结
江湖有缘
2023/09/14
1.8K0
MongoDB数据库的基本使用总结
三、MongoDB高级操作
测试:age添加索引情况 语法:db.c1.createIndex({age: 1}) 继续:db.c1.find({age:18}).explain(‘executionStats’)
Dreamy.TZK
2020/07/09
1.7K0
三、MongoDB高级操作
MongoDB,入门看这一篇足矣!
在介绍 MongoDB 之前,我先介绍一下业务开发的时候遇到的痛点,以便大家对它有一个更加清晰的认识!
Java极客技术
2022/12/04
1.7K0
MongoDB,入门看这一篇足矣!
Linux下mongodb用户管理和设置远程登陆
前提:已经在linux上安装好了mongodb。安装方法这里不说了,网上各种有。 本地用到的工具(windows):mongoChef(一个可视化操作工具,可以用于3.xx版本,romongo不行)
ACK
2020/01/14
3.6K0
Linux下mongodb用户管理和设置远程登陆
Linux 安装 MongoDB
一、下载 Linux:CentOS 7.3 64位 MongoDB:3.6.4 安装目录:/usr/local cd /usr/local wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.6.4.tgz 回到顶部 二、解压缩     解压缩安装包并重命名(方便管理) tar -zxvf mongodb-linux-x86_64-rhel62-3.6.4.tgz mv mongodb-linux-x86_64-rhel62
JMCui
2018/06/14
2.2K0
零基础学习MongoDB (三)—— 管理用户
在b站上听了几个老师的课,有涉及到mongodb的一些历史,比如删库勒索,因此开放的数据库是很危险的,所以我们需要给它们添加管理用户,这样为我们的数据安全加一道墙
小丞同学
2021/08/16
2910
实战 | MongoDB的安装配置
通过上面的安装MongoDB目前还处于裸奔状态,我们必须给其配置上用户密码认证登录。首先我们给MongoDB配置一个超级管理员,操作步骤如下:
JAVA日知录
2021/04/07
6110
实战 | MongoDB的安装配置
MongoDB学习笔记-3、MongoDB权限介绍
MongoDB数据库其安全性并不高,为了防止被一些好心人进行攻击,有效的方法是启用身份验证、不允许远程访问或者添加IP访问限制。
pbinlog
2022/03/13
6340
MongoDB学习笔记-3、MongoDB权限介绍
MongoDB 使用系列(一)-- 安装
环境 系统:Ubuntu 16.04 MongoDB 版本:3.6 安装 添加软件源 1.添加 MongoDB 签名到 APT $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 2.创建/etc/apt/sources.list.d/mongodb-org-3.6.list文件并写入命令 Ubuntu 14.04 $ echo "deb [ arch=amd64 ] https://repo.m
木制robot
2018/04/13
1.3K0
mongodb用户管理
mongodb安装好后第一次进入是不需要密码的,也没有任何用户。 在安装MongoDB之后,先关闭auth认证,启动服务端:
切图仔
2022/09/14
8720
mongodb用户管理
MongoDB从入门到实战之Docker快速安装MongoDB
      在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库,让大家快速的了解了MongoDB的基本概念。这一章开始我们就开始实战篇教程,为了快速把MongoDB使用起来我将会把MongoDB在Docker容器中安装起来作为开发环境使用。然后我这边MongoDB的可视化工具用的是Navicate。废话不多说,我们先花了几分钟开始的把MongoDB环境搭建起来。
追逐时光者
2023/05/26
8880
MongoDB从入门到实战之Docker快速安装MongoDB
CentOS 6 上mongodb安装与使用
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/79797705
shaonbean
2019/05/26
9600
MongoDB认证和授权
MongodDB存储所有的用户信息在admin数据库的集合system.users中,保存数据库、密码和数据库信息。MongoDB默认不启用权限认证,只要能连接到服务器,就可连接到mongod。 若要启用安全认证,需要更改配置文件Authorization,也可简写为 auth。或者在命令行启动MongoDB时加上 -auth参数启动,这样当MongoDB启动后就需要用户和密码进行认证了。
拓荒者
2019/09/17
5.8K0
MongoDB安装与应用 原
epel自带2.6版本的MongoDB,在此安装MongoDB v3.4,方法如下: 官方安装文档: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
阿dai学长
2019/04/03
6310
MongoDB运维与开发(三)
今天来看MongoDB的用户相关的内容,用户、权限,这块儿的内容还是比较多的。慢慢来看
AsiaYe
2020/11/03
1.9K0
超硬核的MongoDB基础讲解。《记得收藏,不然看着看着就找不到了》
目前我们常用的MS SQL数据库、ACCESS数据库、MongoDB、My SQL数据库等等。 之前我讲过My SQL数据库,有兴趣的朋友可以去看看。今天我们主要讲讲MongoDB。
苏州程序大白
2021/08/13
8690
超硬核的MongoDB基础讲解。《记得收藏,不然看着看着就找不到了》
MongoDB基础
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。在nosql数据库里,大部分的查询都是键值对(key、value)的方式。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的。其特征NoSQL、文档存储、Json数据模型、支持事务。
KaliArch
2018/05/30
1.7K2
MongoDB基础
初识 MongoDB 服务
一、了解 MongoDB 之前认识了两种相同类型的缓存技术(关系型数据库)memcached 和 Redis, MongoDB是与之前两款完全不同的一个类型的缓存技术!称之为:文档型数据库! 提到文档,一个新概念JSON,MongoDB的文档类似于JSON对象! JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。 来看一下JSON文档: { "employee
老七Linux
2018/05/31
7500
mongodb设置密码 原
rote:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等
拓荒者
2019/03/11
2.4K0
相关推荐
MongoDB 常用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档