• LeetCode简单题之重排字符形成目标字符串


    题目

    给你两个下标从 0 开始的字符串 s 和 target 。你可以从 s 取出一些字符并将其重排,得到若干新的字符串。

    从 s 中取出字符并重新排列,返回可以形成 target 的 最大 副本数。

    示例 1:

    输入:s = “ilovecodingonleetcode”, target = “code”
    输出:2
    解释:
    对于 “code” 的第 1 个副本,选取下标为 4 、5 、6 和 7 的字符。
    对于 “code” 的第 2 个副本,选取下标为 17 、18 、19 和 20 的字符。
    形成的字符串分别是 “ecod” 和 “code” ,都可以重排为 “code” 。
    可以形成最多 2 个 “code” 的副本,所以返回 2 。
    示例 2:

    输入:s = “abcba”, target = “abc”
    输出:1
    解释:
    选取下标为 0 、1 和 2 的字符,可以形成 “abc” 的 1 个副本。
    可以形成最多 1 个 “abc” 的副本,所以返回 1 。
    注意,尽管下标 3 和 4 分别有额外的 ‘a’ 和 ‘b’ ,但不能重用下标 2 处的 ‘c’ ,所以无法形成 “abc” 的第 2 个副本。
    示例 3:

    输入:s = “abbaccaddaeea”, target = “aaaaa”
    输出:1
    解释:
    选取下标为 0 、3 、6 、9 和 12 的字符,可以形成 “aaaaa” 的 1 个副本。
    可以形成最多 1 个 “aaaaa” 的副本,所以返回 1 。

    提示:

    1 <= s.length <= 100
    1 <= target.length <= 10
    s 和 target 由小写英文字母组成

    来源:力扣(LeetCode)

    解题思路

      根据题目的要求,可知,s中能够重排多少个target取决于s中是否存在足够类型,足够数目的对应字符。基本的思路可以先求出target的字符频率表,然后根据target中以存在的字符类型,在s中统计对应的字符频率,如果s中的字符类型无法覆盖target中的字符类型,则返回0,如果能够覆盖,则计算s中对应的字符频率与target中对应字符的频率商。

    class Solution:
        def rearrangeCharacters(self, s: str, target: str) -> int:
            fre=Counter(target)
            d={}
            for i in fre.keys():
                d[i]=0
            for i in s:
                if i in d.keys():
                    d[i]+=1
            if 0 in d.values():
                return 0
            for i in d.keys():
                d[i]=d[i]//fre[i]
            return min(d.values())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

  • 相关阅读:
    华为eNSP实验-三层交换机的不同网段通信(通过OSPF路由方式)
    Python线程
    快速搭建一个简单的SpringBoot项目-详细步骤
    Spring Boot中整合WebSocket
    华为OD机考题HJ1 字符串最后一个单词的长度
    计算机网络必考题
    CRM客户管理软件对出海企业的帮助与好处
    Can‘t call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.
    太魔性!甘肃博物馆这匹马“不太正经”
    TAO 训练时遇到 docker报错
  • 原文地址:https://blog.csdn.net/qq_18560985/article/details/125881868