动态规划
import sys
import numpy as np
def get_long_common_sub_string(str1, str2):
len_str1 = len(str1)
len_str2 = len(str2)
dp_array = np.zeros((len_str1, len_str2),np.int8)
value1 = str1[0]
value2 = str2[0]
for row in range(dp_array.shape[0]):
if str1[row]==value2:
dp_array[row][0]=1
for col in range(dp_array.shape[1]):
if str2[col]==value1:
dp_array[0][col]=1
max_length = 0
max_index = 0
for h in range(1, dp_array.shape[0]):
for w in range(1, dp_array.shape[1]):
if str1[h]==str2[w]:
dp_array[h][w] = dp_array[h-1][w-1]+1;
if max_length < dp_array[h][w]:
max_index = max(max_index, h)
max_length = max(max_length, dp_array[h][w])
return dp_array, str1[max_index - max_length+1:max_index+1]
def get_lcs(str1, str2):
len_str1 = len(str1)
len_str2 = len(str2)
result=[]
dp_array = np.zeros((len_str1, len_str2),np.int8)
value1 = str1[0]
value2 = str2[0]
for row in range(dp_array.shape[0]):
if str1[row]==value2:
dp_array[row][0]=1
result.append(value2)
for col in range(dp_array.shape[1]):
if str2[col]==value1:
dp_array[0][col]=1
if len(result)==0:
result.append(value1)
max_length = 0
for h in range(1, dp_array.shape[0]):
for w in range(1, dp_array.shape[1]):
if str1[h]==str2[w]:
dp_array[h][w] = dp_array[h-1][w-1] + 1
if max_length < dp_array[h][w]:
result.append(str1[h])
max_length = max(max_length, dp_array[h][w])
else:
dp_array[h][w] = max(dp_array[h-1][w], dp_array[h][w-1])
return dp_array, result
if __name__=="__main__":
str1 = "abcdeffg"
str2 = "abcfg"
dp_array, sub_string = get_lcs(str1, str2)
print(sub_string)
for i in range(dp_array.shape[0]):
sys.stdout.write('\n')
for j in range(dp_array.shape[1]):
sys.stdout.write(str(dp_array[i][j])+',')