def findMaxSubSeq(self, str1, str2):
if any([not str1, not str2]):
return None
len1 = len(str1)
len2 = len(str2)
list = [[0 for i in range(len2 + 1)] for j in range(len1 + 1)]
maxnum = 0
p = 0
for i in range(len1):
for j in range(len2):
if str1[i] == str2[j]:
list[i + 1][j + 1] = list[i][j] + 1
if list[i + 1][j + 1] > maxnum:
maxnum = list[i + 1][j + 1]
p = i + 1
if maxnum == 0:
return ''
else:
print(str1[p - maxnum:p])
return str1[p - maxnum:p]【知识点】
1、为什么字符串相同时,用了list[i + 1][j + 1] = list[i][j] + 1,而不是list[i][j] =1?
如果用list[i][j] =1的方式,结果如下图所示,求公共子串的长度时,需要将对角线上的值进行相加。因此为了优化处理,直接在list[i + 1][j + 1]进行赋值。
2、为什么创建二维数组时,用的是list = [[0 for i in range(len2 + 1)] for j in range(len1 + 1)],而不是list = [[0 for i in range(len1 + 1)] for j in range(len2 + 1)]?
因为如果采用后面的list生成方式,行列是len2,列数是len1。当2个字符串长度不一致时,会出现列表长度异常的情况。
如果不理解,可以看下面的代码:
a [[i ()] j ()] a[][] (a)
结果是:
Traceback (most recent call last):
File 'E:/OJ/TestPython/src/huawei/test.py', line 2, in <module>
a[2][3] = 1
IndexError: list assignment index out of range
报了列表超过长度了?为什么呢?实际我们想取的是第3行第4列的数值,但是我们定义的列表是3列4行,所以就报错了。
3、any([a,b]) :只要有一个是True,就会返回True;all([a,b])必须全部是true,才会返回true





































苏公安网备 32011402010933号