Python最长公共子串算法实例

下面是详细讲解“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日

相关文章

  • Python中os模块的简单使用及重命名操作

    当我们需要对操作系统进行一些高级操作时,Python中的os模块是非常有用的一个模块。os模块提供对操作系统进行访问的接口,以我们能够编写出功能强大的程序。 简单使用 首先,我们需要导入os模块: import os 获取当前工作目录 可以使用os.getcwd()方法获取当前工作目录: import os # 获取当前工作目录 current_dir = …

    python 2023年6月2日
    00
  • Python列表list数组array用法实例解析

    Python列表(list)/数组(array)用法实例解析 在Python中,列表(List)和数组(Array)都是常用的数据类型,它们都可以用于存储多个元素。本文将详细讲解Python中列表(List)和数组(Array)的使用方法,包括创建、访问、添加、删除等操作。 创建列表(List)/数组(Array) 创建列表(List)和数组(Array)的…

    python 2023年5月12日
    00
  • django model 条件过滤 queryset.filter(**condtions)用法详解

    下面我来详细讲解一下“django model 条件过滤 queryset.filter(**condtions)用法详解”的完整攻略。 一、什么是django model? Django是一个流行的Web框架,提供了一个称为ORM(对象关系映射)的工具。ORM可以让你用Python代码操作数据库,而不是写SQL语句。Django的ORM叫做Django m…

    python 2023年5月18日
    00
  • 浅谈Python中的继承

    浅谈Python中的继承 继承概述 继承是一种常见的面向对象编程(OOP)技术,它允许我们创建一个新的类,该类继承了另一个类的属性和方法。新类称为“子类”或“派生类”,而被继承的类称为“父类”或“基类”。 通过继承,子类可以重用父类现有的代码,并在此基础上进行扩展或修改,从而实现代码的复用和维护。 在Python中,继承是通过在子类定义时在类名后添加括号,将…

    python 2023年6月6日
    00
  • 快速了解Python相对导入

    以下是关于 Python 相对导入的快速了解攻略: 问题描述 在 Python 中,相对导入是指在一个包中导入另一个包中的模块。相对导入的语法比较特殊,容易引起混淆。本文将快速介绍 Python 中相对导入的语法和用法。 解决方法 以下是 Python 中相对导入的语法和用法: 相对导入的语法 相对导入的语法使用点号(.)表示相对路径。例如,如果要从包中导入…

    python 2023年5月13日
    00
  • 详解迷宫问题原理与使用方法

    迷宫问题说明 迷宫问题是指在一个二维的矩阵中,从起点走到终点的最短路径。这个问题可以用算法来解决,其中最常用的算法是深度优先搜索算法和广度优先搜索算法。 深度优先搜索算法 深度优先搜索算法是从一个起点开始,通过遍历相邻节点来找到终点的算法。这个算法的实现方式是使用递归,从起点开始递归往下,直到找到终点或者无法继续往下递归为止。 下面是使用深度优先搜索算法求解…

    算法 2023年3月27日
    00
  • Python新手在作用域方面经常容易碰到的问题

    Python新手在作用域方面经常容易碰到的问题 在Python中,作用域是指变量的可见性和生命周期。Python新手在作用域方面经常容易碰到的问题包括全局变量和局部变量的使用、闭包的使用、及函数参数的传递等。本文将详细讲解Python新手在作用域方面经常容易碰到的问题,包括两个示例说明。 全局量和局部变量的使用 在Python中,局变量和局部变量的使用是一个…

    python 2023年5月13日
    00
  • 详解Python中append、extend和insert的区别

    append(): append()函数用于将一个新元素添加到列表的末尾,这个新元素可以是任何数据类型,例如int、float、string等。使用代码如下: list1 = [1,2,3,4,5] # 添加新元素6 list1.append(6) # 打印列表 print(list1) 输出结果为[1, 2, 3, 4, 5, 6]。 extend(): …

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