s1 = 'abcdefg'
s2 = 'defabcdoabcdeftw'
s3 = '1234a'
s4 = 'wqweshjkb'
s5 = 'defabcd'
s6 = 'j'

求 s1、s3、s4、s5、s6 分别与 s2 的最长共同子串,分别测试有共同子串和没有共同子串的情况下此函数效率问题。

s1 = 'abcdefg'
s2 = 'defabcdoabcdeftw'
s3 = '1234a'
s4 = 'wqweshjkb'
s5 = 'defabcd'
s6 = 'j' def findstr(str1,str2):
'''
Returns str1 and str2 longest common substring. 2017/10/21 23:30 :param str1: 'abcdefg'
:param str2: 'defabcd'
:return: 'abcd'
'''
count = 0
length = len(str1)
for sublen in range(length,0,-1):
for start in range(0,length - sublen + 1):
count += 1
substr = str1[start:start+sublen]
if str2.find(substr) > -1:
print('count={} subStringLen:{}'.format(count,sublen))
return substr
else:
return "'{}' and '{}' do not have a common substring".format(str1,str2) print(findstr(s1,s2))
print(findstr(s3,s2))
print(findstr(s4,s2))
print(findstr(s5,s2))
print(findstr(s6,s2))

  输出结果:

count=2  subStringLen:6    #findstr(s1,s2)
abcdef count=15 subStringLen:1 #findstr(s3,s2)
a count=37 subStringLen:1 #findstr(s4,s2)
w count=1 subStringLen:7 #findstr(s5,s2)
defabcd 'j' and 'defabcdoabcdeftw' do not have a common substring #findstr(s6,s2)

  

永远不要相信用户的输入,一个健壮的代码往往业务功能块代码很少,而对用户输入的验证代码部分越要更严谨,将用户所有的输入都考虑在内。

Python [习题] 求最长共同子串的更多相关文章

  1. poj 2774 Long Long Message,后缀数组,求最长公共子串 hdu1403

    题意:给出两个字符串,求最长公共子串的长度. 题解:首先将两个字符串连在一起,并在中间加一个特殊字符(字串中不存在的)切割,然后两个串的最长公共字串就变成了全部后缀的最长公共前缀.这时就要用到heig ...

  2. POJ 2774 Long Long Message (二分 + Hash 求最长公共子串)题解

    题意:求最长公共子串 思路:把两个串Hash,然后我们把短的作为LCS的最大可能值,然后二分长度,每次判断这样二分可不可以.判断时,先拿出第一个母串所有len长的子串,排序,然后枚举第二个母串len长 ...

  3. 文本比较算法Ⅱ——Needleman/Wunsch算法的C++实现【求最长公共子串(不需要连续)】

    算法见:http://www.cnblogs.com/grenet/archive/2010/06/03/1750454.html 求最长公共子串(不需要连续) #include <stdio. ...

  4. 求最长公共子串 Longest Common Subsequence

    最长公共子串 // Longest Common Subsequence 子串有别于子序列, 子串是连续的, 而子序列可以不连续 /*--------------------------------- ...

  5. python实现求最长子串长度

    给定一个字符串,求它最长的回文子串长度,例如输入字符串'35534321',它的最长回文子串是'3553',所以返回4. 最容易想到的办法是枚举出所有的子串,然后一一判断是否为回文串,返回最长的回文子 ...

  6. 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774

    Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...

  7. 后缀数组(模板题) - 求最长公共子串 - poj 2774 Long Long Message

    Language: Default Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 21 ...

  8. poj2774 Long Long Message 后缀数组求最长公共子串

    题目链接:http://poj.org/problem?id=2774 这是一道很好的后缀数组的入门题目 题意:给你两个字符串,然后求这两个的字符串的最长连续的公共子串 一般用后缀数组解决的两个字符串 ...

  9. java求最长公共子串的长度

    1这道题目就是给定两个字符串,然后求这两个字符串的最长公共子串的最大长度,假设我的f()方法是来求两个字符串的最大公共子串,从头开始逐一比较,如果相等,则 继续调用这个方法,使得递归的长度+1,如果不 ...

随机推荐

  1. SqlBulkCopy效率低下原因分析

    看到标题 应该会奇怪 SqlBulkCopy 为什么会效率低下 场景:接手项目 数据库SQLSERVER2008R2,  目前有一张流水表单表数据超过4亿,表中建有索引,有其他模块对这个表进行查询操作 ...

  2. php+openresty 部署安装

    1. ecs 购买 地域: 华北 2 可用区: 随机分配 安全组 ID: sg-2533jog6k I/O 优化实例: I/O 优化实例 实例规格: 1 核 1GB 网络类型: 经典网络 带宽: 1M ...

  3. Nodejs入门-基于Node.js的简单应用

    服务端JavaScript 众所周知的,JavaScript是运行在浏览器的脚本语言,JavaScript通常作为客户端程序设计语言使用,以JavaScript写出的程序常在用户的浏览器上运行.直至N ...

  4. UVa10129,Play On Words

    给出n个单词,如果一个单词的尾和另一个单词的头字符相等,那么可以相连,问这n个单词是否可以排成一列.欧拉路应用,构图:一个单词的头尾字母分别作为顶点,每输入一个word,该word的头指向word的尾 ...

  5. (转)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    原文出自:http://blog.csdn.net/anxpp/article/details/51512200 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间 ...

  6. (转)UML实践详细经典教程----用例图、顺序图、状态图、类图、包图、协作图

    原文链接:http://dn.codegear.com/article/31863 面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是 ...

  7. excel中添加拼接行

    Sub 万途标签()Dim iFor i = 1 To Sheets.Count    If Sheets(i).Name = "数据表" Then        If MsgBo ...

  8. vb.net 代码建立控件,并显示在窗体上

    Dim lb As New Label        lb.Text = "hello"        lb.Top = 200        lb.Left = 100      ...

  9. (function($){...})(jQuery)和$(document).ready(function(){}) 的区别

    (function($){...})(jQuery)  实际上是执行()(para)匿名函数,只不过是传递了jQuery对象.   立即执行函数:相当于先申明一个函数,声明完后直接调用: 用于存放开发 ...

  10. 对Numpy广播操作的理解

    1.首先检查两个矩阵维数是否相同,若不同,对维数少的补一.注意这里的维数不是指n行d列中的n和d的值,对于这种情况维数就是2.若一个两维的矩阵(n,d)和一个一维的数组(m,)相乘,补一操作就是将那个 ...