专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
创伙伴  ·  卖出600万只枕头的亚朵,栽在一个枕套上 ·  15 小时前  
融智有色  ·  美联储经济褐皮书:整体前景扔悲观 ... ·  16 小时前  
求是创新力量  ·  浙大系投资圈最具影响力创投机构 ·  昨天  
黑龙江政务  ·  黑龙江省印发“成果转化尽职免责指引” ·  昨天  
黑龙江政务  ·  黑龙江省印发“成果转化尽职免责指引” ·  昨天  
51好读  ›  专栏  ›  爬虫俱乐部

找出命中注定的“有缘人”

爬虫俱乐部  · 公众号  ·  · 2018-07-17 10:18

正文

请到「今天看啥」查看全文


列的矩阵,是为了实现连续多个字符相同,使之个数相加,从而得出首个最长公共字符。


代码详解

首先我们输入两个字符串 str1 str2 ,提取它们的长度,分别为 lstr1 lstr2 ,然后生成一个大列表,这个列表相当于上面讲的矩阵,它是由 (lstr1+1) 子列表 ,这个子列表包含 (lst2+1) 。代码如下:

str1 = 'abcd'
str2 = 'bcad'
lstr1 = len(str1)
lstr2 = len(str2)
record = [[0 for i in range(lstr2 + 1)] for j in range(lstr1 + 1)]  # 多一位
print(record)

运行结果如下:

这里值得注意的是小编生成大列表,用的是两层列表生成式,先用 [0 for i in range(lstr2 + 1)] 生成 [0, 0, 0, 0, 0] ,再用一层列表生成式生成大列表。这里 record[i+1][j+1] 就代表 str1 的第 i 个字符和 str2 j 个字符。如果这边这里不等于零,则代表 str1 的第 i 个字符和 str2 j 个字符相同,反之,则不相同。可能有小伙伴不懂,没关系,后面有实例和更加详细的介绍哦!

接下来,我们把 最长匹配长度 匹配位置 初始化为 ,然后从 str1 的第一个字符开始,和 str2 的每个字符进行匹配,匹配上就把对应位置等于 上个位置加一 。从而得到第一次的匹配长度 maxNUM ,从而进行循环,得到最大的匹配长度,打印出最长公共字符串和长度,代码如下:

maxNum = 0  # 最长匹配长度
p =
0  # 匹配的起始位
for i in range(lstr1):
   
for j in range(lstr2):
       
if str1[i] == str2[j]:
         
# 相同则累加
          record[i +
1][j + 1] = record[i][j] + 1
         
if record[i + 1][j + 1] >maxNum:
              # 获取最大匹配长度
              maxNum = record[i +
1][j + 1]
             
# 记录最大匹配长度的终止位置
              p = i +
1
print(record)
print(
"最长公共字符串:%s" % str1[p - maxNum:p])
print(
"最大匹配长度: %s" % maxNum)

运行结果如下:

可以看出大列表已经变成了如上图所示,我们可以看到 record[i+1][j+1]







请到「今天看啥」查看全文