当前位置: 首页 > 面试题库 >

两个以上字符串中最长的公共子字符串-Python

弘志勇
2023-03-14
问题内容

我正在寻找一个Python库,用于从 一组字符串中 找到最长的公共子 字符串 。有两种方法可以解决此问题:

  • 使用后缀树
  • 使用动态编程。

实施的方法并不重要。重要的是,它可以用于 一组字符串 (不仅是两个字符串)。


问题答案:

这些成对的函数将在任意字符串数组中找到最长的公共字符串:

def long_substr(data):
    substr = ''
    if len(data) > 1 and len(data[0]) > 0:
        for i in range(len(data[0])):
            for j in range(len(data[0])-i+1):
                if j > len(substr) and is_substr(data[0][i:i+j], data):
                    substr = data[0][i:i+j]
    return substr

def is_substr(find, data):
    if len(data) < 1 and len(find) < 1:
        return False
    for i in range(len(data)):
        if find not in data[i]:
            return False
    return True


print long_substr(['Oh, hello, my friend.',
                   'I prefer Jelly Belly beans.',
                   'When hell freezes over!'])

毫无疑问,该算法可以得到改进,而且我对Python的接触也很少,因此也许它在语法上也可能更有效,但是它应该可以完成工作。

编辑: 内联第二个is_substr函数,如JF Sebastian所示。用法保持不变。注意:算法无变化。

def long_substr(data):
    substr = ''
    if len(data) > 1 and len(data[0]) > 0:
        for i in range(len(data[0])):
            for j in range(len(data[0])-i+1):
                if j > len(substr) and all(data[0][i:i+j] in x for x in data):
                    substr = data[0][i:i+j]
    return substr

希望这可以帮助,

杰森



 类似资料:
  • 本文向大家介绍java实现字符串匹配求两个字符串的最大公共子串,包括了java实现字符串匹配求两个字符串的最大公共子串的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现求两个字符串最大公共子串的方法。分享给大家供大家参考,具体如下: 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结了这篇博客内容:求两个字符串的最大公共子串。 算法思想:基于图计算两字符串的公共子

  • 本文向大家介绍手写代码:两个字符串的最长公共子序列?相关面试题,主要包含被问及手写代码:两个字符串的最长公共子序列?时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 我遇到了一个问题语句,要在给定的两个子字符串之间找到所有公共子字符串这样一种方式,在每种情况下都必须打印最长的子字符串。问题声明如下: 编写一个程序来查找两个给定字符串之间的公共子字符串。但不包括包含在较长公共子字符串中的子字符串。 null 在这种情况下,您不必使用字符串实用程序方法,如:contains、indexOf、StringTokenizer、split和replace。 我的算法是这

  • 我正在学习最长公共子序列,使用以下算法: 公共级LCS{ 但是程序返回一个ErrorCharAt(未知来源),并且没有做任何事情。 另外,如果我将int i和j更改为0,那么下面的E将是索引-1和错误 我现在很迷路。有人能帮我吗?

  • 本文向大家介绍Python求两个字符串最长公共子序列代码实例,包括了Python求两个字符串最长公共子序列代码实例的使用技巧和注意事项,需要的朋友参考一下 一、问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB。则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA 二、算法

  • 问题内容: 提出一个最优雅的JavaScript,Ruby或其他解决方案来解决一个相对琐碎的问题是一个挑战。 这个问题是Longest common substring问题的 一个更具体的情况。我只需要找到数组中最长的公共 起始 子串。这大大简化了问题。 例如,最长的子字符串是“ inters”。但是,我不需要在中找到“有意义” 。 我已经通过用JavaScript快速编写一个解决方案来解决该问题