Leetcode 3628. Maximum Number of Subsequences After One Inserting

1. 解题思路

这一题思路上就是拆成两部分,首先就是考察当前所有的LCT字符串的个数,然后就是考察插入一个字符之后能够额外获取的LCT的最大个数是多少,两者相加即为我们最终的答案。

然后,首先关于原始LCT字符串的个数,我们只需要考察每一个字符C出现的位置前后各有多少个LT即可。

其次,关于如何考察插入任意字符之后能够获取的最大LCT字符串的增量,我们只需要分别考察在每一个位置上插入L, C, T三个字符之后的结果即可,而这三种方式带来的增量分别为:

  • 后续CT字符串的个数
  • 前后LT的字符个数的乘积
  • 前方LC字符串的个数

其中,一三两种结果可以通过累积数组进行获取,而第二种情况则直接前后根据第一步当中预先得到的结果计算即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def numOfSubsequences(self, s: str) -> int:
        n = len(s)
        cnt_T = [0 if ch != "T" else 1 for ch in s]
        cnt_CT = [0 for _ in s]
        for i in range(n-2, -1, -1):
            cnt_T[i] += cnt_T[i+1]
            if s[i] == "C":
                cnt_CT[i] = cnt_T[i+1] + cnt_CT[i+1]
            else:
                cnt_CT[i] = cnt_CT[i+1]
        cnt_L = [0 if ch != "L" else 1 for ch in s]
        cnt_LC = [0 for _ in s]
        for i in range(1, n):
            cnt_L[i] += cnt_L[i-1]
            if s[i] == "C":
                cnt_LC[i] = cnt_L[i-1] + cnt_LC[i-1]
            else:
                cnt_LC[i] = cnt_LC[i-1]
        ans, inc = 0, 0
        for i in range(n):
            if s[i] == "C":
                ans += cnt_L[i] * cnt_T[i]
            inc = max(inc, cnt_CT[i], cnt_LC[i], cnt_L[i] * cnt_T[i])
        return ans + inc

提交代码评测得到:耗时687ms,占用内存29.62MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值