LeetCode笔记:Weekly Contest 245(补发)

本文分享了解题思路和代码实现,涉及字符串等同化、字符移除次数、三元组合并问题,展示了如何通过操作使字符串一致及判断能否形成目标三元组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 题目一

给出题目一的试题链接如下:

1. 解题思路

这一题其实挺简单的,因为题目中给出的操作事实上可以完成包括某一字符串内部的顺序互换以及两字符串之间的子串穿插等全部操作。

因此,事实上最终我们只需要比较所有字符串之中的各个字符的计数是否能够被元素个数整除,只要它能够整除,就一定可以通过某一系列的操作使得其最终达到相互相同的情况。

2. 代码实现

给出python代码实现如下:

class Solution:
    def makeEqual(self, words: List[str]) -> bool:
        cnt = defaultdict(int)
        for s in words:
            for c in s:
                cnt[c] += 1
        n = len(words)
        return all(x % n == 0 for x in cnt.values())

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

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这一题同样比较惭愧,没能想到比较靠谱的解法,最终就只能够暴力求解了,唯一算是优化的地方就是使用二分法进行临界点的查找,但是也不算多么巧妙,只能说万幸没有遇到超时问题……

2. 代码实现

给出python代码实现如下:

class Solution:
    def maximumRemovals(self, s: str, p: str, removable: List[int]) -> int:
        def get_substring(s, k):
            invalid = set(removable[:k])
            res = "".join([c for i, c in enumerate(s) if i not in invalid])
            return res
        
        def is_substring(s, p):
            i, j, n, m = 0, 0, len(s), len(p)
            while i < n and j < m:
                while i < n and s[i] != p[j]:
                    i += 1
                if i >= n:
                    break
                i += 1
                j += 1
            return j >= m
                         
        i, j = 0, len(removable)+1
        while i < j-1:
            m = (i+j) // 2
            if is_substring(get_substring(s, m), p):
                i = m
            else:
                j = m
        return i

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

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这一题较之上一题就水了非常多。

根据题目中操作的本质,任何操作都会对三元组中的每一个元素取极值,因此,对于任何一个存在某一元素大于目标三元组中对应位置上的元素的三元组,都是无法被我们使用的三元组。

从而,我们只需要将剩余的所有三元组全部留存下来进行以下操作,看一下是否能够能够获得最终的目标三元组即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def mergeTriplets(self, triplets: List[List[int]], target: List[int]) -> bool:
        triplets = [it for it in triplets if all(x <= y for x, y in zip(it, target))]
        if len(triplets) == 0:
            return False
        x = max([it[0] for it in triplets])
        y = max([it[1] for it in triplets])
        z = max([it[2] for it in triplets])
        return x == target[0] and y == target[1] and z == target[2]

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

4. 题目四

给出题目四的试题链接如下:

同样的,这题我也放弃了,想了一周多,没想出解法,看答案也没啥思路,放弃了吧……

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值