来自北大算法课的Leetcode题解:2287. 重排字符形成目标字符串

文章提供了一个在Python中使用哈希表和比特数组来统计两个字符串中字符出现次数的方法。通过对字符串s和target的字符计数,判断能否形成目标字符串的副本。如果不能,则返回0;否则,计算最小的重新排列次数。该算法适用于解决字符串处理和数组操作的问题。
摘要由CSDN通过智能技术生成

代码仓库Github | Leetcode solutions @doubleZ0108 from Peking University.

  • 解法1(88% 51%):因为只有26个小写字母,因此很容易想到通过哈希表或者比特数组先分别统计下两字符串每个字符都出现了多少次,然后一次遍历两数组中的各位,如果t在这个字符有,但s没有则直接返回0,此时不可能有副本;否则就计算s//t并全局取最小值即可
class Solution:
    def rearrangeCharacters(self, s: str, target: str) -> int:
        bits_s = [0 for _ in range(26)]
        bits_t = [0 for _ in range(26)]
        for ch in s:
            bits_s[ord(ch) - ord('a')] += 1
        for ch in target:
            bits_t[ord(ch) - ord('a')] += 1

        res = float('inf')
        for bs, bt in zip(bits_s, bits_t):
            if bt != 0:
                if bt>bs: 
                    return 0
                else:
                    res = min(res, bs//bt)
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doubleZ0108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值