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日

相关文章

  • Django之创建引擎索引报错及解决详解

    下面就为大家详细讲解” Django之创建引擎索引报错及解决详解 “的完整攻略。 问题概述 在Django项目中,当我们使用Django内置的search引擎来创建索引时,可能会遇到以下报错提示: django.core.exceptions.ImproperlyConfigured: Error loading interface c:…\solr\b…

    python 2023年5月13日
    00
  • 如何在Python中执行SQLite数据库的查询语句?

    在Python中,我们可以使用sqlite3库执行SQLite数据库的查询语句。以下是如何在Python中执行SQLite数据库的查询语句的完整使用攻略,包括连接数据库、创建游标、执行语句等步骤。同时提供了两个示例以便更好理解如何在Python中执行SQLite数据库的查询语句。 步骤1:安装sqlite3库 在Python中,我们可以使用sqlite3库连…

    python 2023年5月12日
    00
  • 基于Python实现简单的定时器详解

    基于Python实现简单的定时器详解 概述 定时器是一种常用的编程工具,在某段时间间隔后执行特定的操作,常用于多线程、网络编程、定时任务等场景。Python标准库提供了多种方式实现定时器,如time.sleep()、threading.Timer()、sched.scheduler()等,本文将介绍基于threading.Timer()实现简单定时器的实现方…

    python 2023年5月19日
    00
  • Python 中文正则表达式笔记

    Python中文正则表达式笔记 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换等操作。在Python中,我们可以使用re模块来实现正则表达式的相关操作。本文将为您介绍Python中文正则表达式的基本语法和常用操作,以及两个示例说明。 基本语法 在Python中,我们可以使用re模块来实现正则表达式的相关操作。下面是一些常用的正则表达式语法: .…

    python 2023年5月14日
    00
  • 解决python DataFrame 打印结果不换行问题

    当我们使用pandas的DataFrame模块打印数据的时候,有时候会发现结果没有按照我们期望的格式输出,特别是行过长或列太多的时候,结果可能会出现不换行的问题。本文将提供两种方法来解决此问题。 方法一:使用to_string方法 在DataFrame对象上使用to_string()方法可以将数据转换为格式化的字符串。设置参数line_width为200或其…

    python 2023年6月3日
    00
  • Python面向对象编程(一)

    关于“Python面向对象编程(一)”,以下是完整攻略: 1. 面向对象编程简介 面向对象编程( Object Oriented Programming, OOP)是一种程序设计的方法,它将程序中的对象作为程序的基本单元,通过封装、继承和多态等机制,实现代码的可复用、可维护和可扩展。在 Python 中,一切皆为对象,因此 Python 是一门完美的面向对象…

    python 2023年5月13日
    00
  • 用python制作个论文下载器(图形化界面)

    制作论文下载器的完整攻略可以分为以下几个步骤: 步骤一:确定需求 在开始制作之前,我们需要确定自己的需求,考虑自己要做一个什么样的论文下载器。这个下载器需要具备哪些功能,需要考虑用户体验如何。 步骤二:安装依赖包 在制作下载器前,我们需要安装一些Python的依赖包,可以使用以下指令安装: pip install requests beautifulsoup…

    python 2023年6月13日
    00
  • python 多线程对post请求服务器测试并发的方法

    在Python中,我们可以使用多线程来测试POST请求服务器的并发性能。多线程可以同时发送多个POST请求,以便模拟多个用户同时访问服务器的情况。本文将通过实例讲解如何使用Python多线程测试POST请求服务器的并发性能,包括使用threading库和两个示例。 使用threading库测试POST请求服务器的并发性能 我们可以使用threading库来测…

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