• 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

    在这里插入图片描述

  • 相关阅读:
    为什么要学MySQL数据库,它有什么用?
    美国开源数据库ScyllaDB完成4300万美元融资
    【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】
    react项目优化
    刷新页面,时间展示错误
    第十四届全国大学生数学竞赛决赛(非数类)游记+答案解析
    Mysql里常见的问题
    MySQL的级联操作
    业务流程管理的未来趋势:个性化定制
    测试项目(MSTest)中涉及到读取App.config 操作(.net6)
  • 原文地址:https://blog.csdn.net/qq_18560985/article/details/125881868