LeetCode 刷题

无序数组倒数第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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值