Python最长公共子串算法实例

yizhihongxing

下面是详细讲解“Python最长公共子串算法实例”的完整攻略,包括算法原理、Python实现和两个示例说明。

算法原理

最长公共子串算法是一种用于查找两个字符串中最长公共子串的算法。其主要思想是将两个字符串分别以行和列的形式,然后查找它们的交叉点,找到最长的交叉点序列,即为最长公共子串。最长公共子串算法的实现过程如下:

  1. 构建一个二维数组,用于存储两个字符串中每个字符的匹配情况。
  2. 遍历二维数组,查找最长的连续匹配子串。
  3. 返回最长的连续匹配子串。

Python实现

以下是Python实现长公共子串算法的示例代码:

def longest_common_substring(s1, s2):
    m = [[0] * (1 + len(s2)) for i in range(1 + len(s1))]
    longest, x_longest = 0, 0
    for x in range(1, 1 + len(s1)):
        for y in range(1, 1 + len(s2)):
            if s1[x - 1] == s2[y - 1]:
                m[x][y] = m[x - 1][y - 1] + 1
                if m[x][y] > longest:
                    longest = m[x][y]
                    x_longest = x
            else:
                m[x][y] = 0
    return s1[x_longest - longest: x_longest]

s1 = "abcdefg"
s2 = "defghijk"
print(longest_common_substring(s1, s2))

上述代码中使用Python实现了最长公共子串算法。首先定义一个函数longest_common_substring,该函数接受两个字符串s1和s2作为参数。然后构建一个二维数组m,用于存储两个字符串中每个字符的匹配情况。接着遍历二维数组,查找最长的连续匹配子串。最后返回最长的连续匹配子串。

示例说明

以下两个示例,说明如使用上代码进行最长公共子串查找。

示例1

使用最长公共子串算法查找两个字符串的最长公共子串。

def longest_common_substring(s1, s2):
    m = [[0] * (1 + len(s2)) for i in range(1 + len(s1))]
    longest, x_longest = 0, 0
    for x in range(1, 1 + len(s1)):
 for y in range(1, 1 + len(s2)):
            if s1[x - 1] == s2[y - 1]:
                m[x][y] = m[x - 1][y - 1] + 1
                if m][y] > longest:
                    longest = m[x][y]
                    x_longest = x
            else:
                m[x][y] = 0
    return s1[x_longest - longest: x_longest]

s1 = "abcdefg"
s2 = "defghijk"
print(longest_common_substring(s1, s2))

运行上述代码,输出结果为"def",即为两个字符串的最长公共子串。

上述代码中,使用最长公共子串算法查找两个字符串的最长公共子串。首先定义一个函数longest_common_substring,该函数接受两个字符串s1和s2作为参数。然后构建一个二维数组m,用于存储两个字符串中每个的匹配情况。接着遍历二维数组,查找最长的连续匹配子串。最后返回最长的连续匹配子串。

示例2

使用最公共子串算法查找多个字符串的最长公共子串。

def longest_common_substring(*args):
    s = min(args, key=len)
    for i, c in enumerate(s):
        if not all(c == arg[i] for arg in args):
            return s[:i]
    return s

s1 = "abcdefg"
s2 = "defghijk"
s3 = "ghijklmn"
print(longest_common_substring(s1, s2, s3))

运行上述代码,输出结果为"g",即为多个字符串的最长公共子串。

上述代码中,使用最长公共子串算法查找多个字符串的最长公共子串。首先定义一个函数longest_common_substring,该函数接受多个字符串作为参数。然后使用min函数找到最短的字符串s。接着遍历最短的字符串s,查找最长的连续匹配子串。最后返回最长的连续匹配子串。

结语

本文介绍了如何使用Python实现最长公共子串算法进行字符串匹配,包括算法原理、Python实现和两个示例说明。最长公共子串算法是一种用于查找两个字符串中最长公共子串的算法,其主要思想是将两个字符串分别以行和列的形式排列,然后查找它们的交叉点,找到最长的交叉点序列,即为最长公共子串。在实现中,需要注意选择适当的参数,并根据具体情况调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python最长公共子串算法实例 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 如何用Pandas在Python中创建虚拟变量

    创建虚拟变量通常是数据分析过程中的一项必要工作。在Python中,我们可以使用Pandas库中的get_dummies()函数来创建虚拟变量。以下是创建虚拟变量的完整攻略: 1. 导入必要的库 首先,需要导入Pandas库。同时,如果要演示示例,也需要导入numpy库和matplotlib库。 import pandas as pd import numpy…

    python-answer 2023年3月25日
    00
  • Python 使用Opencv实现目标检测与识别的示例代码

    下面就为大家详细讲解 Python 使用 Opencv 实现目标检测与识别的示例代码的完整攻略。 一、前置知识 在学习本篇攻略之前,你需要掌握以下知识: Python 语法基础 图像处理基础 Opencv 库的基本使用 二、环境准备 在使用 Python 实现目标检测与识别之前,我们需要先安装以下环境: Python 3.x Opencv-python Nu…

    python 2023年5月18日
    00
  • python错误处理详解

    Python错误处理详解 在编写Python程序时,难免会发生错误。对于程序员来说,要善于处理这些错误,让程序能够正常运行或者优雅地退出。本文将对Python的错误处理机制进行详细讲解,帮助读者更好地处理程序中的错误。 Python中的错误类型 Python中主要有以下几种错误类型: 语法错误(Syntax Error):代码无法被Python解释器理解。例…

    python 2023年5月13日
    00
  • python实现简单的井字棋小游戏

    Python实现简单的井字棋小游戏 井字棋是一种非常经典的小游戏,下面将详细讲解怎样使用 Python 实现一个简单的井字棋小游戏。 游戏规则 井字棋是由两个玩家轮流在一个3×3网格上放置棋子(通常是X和O),先将三个棋子排列成横线、竖线或斜线的玩家获胜。 实现步骤 定义游戏棋盘 定义棋手 (player) 输出棋盘并让玩家输入下棋位置 检查胜利和平局 定义…

    python 2023年6月3日
    00
  • Python实现单例模式的四种方式详解

    下面是详细讲解“Python实现单例模式的四种方式详解”的完整攻略。 1. 什么是单例模式? 单例模式,顾名思义,就是指一个类只能实例化成一个对象的设计模式。在程序中,单例模式通常被使用与创建一个全局的状态管理器或者持久连接等。因此,单例模式是一种非常常见的设计模式。 2. 单例模式的实现方式 2.1. 模块方式 Python中的模块是天然的单例模式,因为模…

    python 2023年5月19日
    00
  • Python 结巴分词实现关键词抽取分析

    Python结巴分词是一种中文分词技术,可以将中文文本中的词汇进行拆分,并结合特定算法来确定每个词汇的词性和用途。通过对结巴分词的实现,可以完成中文文本的关键词提取和分析。 下面是Python结巴分词实现关键词抽取分析的完整攻略: 1. 安装结巴分词库 可以通过pip命令来安装结巴分词库,具体代码如下: pip install jieba 2. 导入结巴分词…

    python 2023年5月14日
    00
  • Python使用Chrome插件实现爬虫过程图解

    Python使用Chrome插件实现爬虫过程图解 在使用Python进行网络爬虫时,经常需要模拟用户访问,如使用浏览器访问目标网站,获取动态页面的html文本。而Chrome插件可以模拟浏览器的功能,因此可以通过Chrome插件来实现爬虫的目的。以下是使用Python和Chrome插件实现爬虫的具体步骤: 1. 安装Chrome浏览器和扩展程序 首先需要安装…

    python 2023年5月14日
    00
  • 一篇文章带你学习Python3的高级特性(2)

    针对“一篇文章带你学习Python3的高级特性(2)”,我可以给出以下完整的攻略。 文章简介 本文主要介绍Python3中一些高级特性,如函数式编程、迭代器和生成器等,帮助读者更深入地理解Python3的相关概念和技术。 函数式编程 函数式编程是指将函数作为一等公民,使用函数来处理数据的一种编程方式。Python中,支持函数式编程的关键在于lambda表达式…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部