无序数组倒数第K大的数
最长公共子串/最长公共子序列
子串:字符串中连续的n个字符,如abcdefg中,ab,cde,fg等都属于它的字串。
子序列:字符串中不一定连续但先后顺序一致的n个字符。如abcdefg中,acdg,bdf属于它的子序列,而bac,dbfg则不是,因为它们与字符串的字符顺序不一致。
最长公共子序列,递推公式:
def lcs(s, t):
len1 = len(s)
len2 = len(t)
# 初始化一个二维数组,行数为t的大小,列数为s的大小
res = [[0 for i in range(len1 + 1)] for j in range(len2 + 1)]
for i in range(1, len2 + 1):
for j in range(1, len1 + 1):
if t[i - 1] == s[j - 1]:
res[i][j] = 1 + res[i - 1][j - 1]
else:
res[i][j] = max(res[i - 1][j], res[i][j - 1])
return res[-1][-1]
最长公共子串,递推公式
def lcs_string(s, t):
len1 = len(s)
len2 = len(t)
# 初始化一个二维数组,行数为t的大小,列数为s的大小
res = [[0 for i in range(len1 + 1)] for j in range(len2 + 1)]
# 声明一个变量,记录最大公共子串的值
max_len = 0
for i in range(1, len2 + 1):
for j in range(1, len1 + 1):
if t[i - 1] == s[j - 1]:
res[i][j] = 1 + res[i - 1][j - 1]
else:
res[i][j] = 0 # 不等时,res=0
max_len = max(max_len, res[i][j])
return max_len