重构字符串

本文介绍了LeetCode的第767题,题目为重构字符串。文章详细阐述了如何判断一个字符串是否可以重构,并提供了重构字符串的具体步骤,包括统计最大重复字符、构建基串和插入剩余字符的过程。最后提到了算法的时间复杂度和空间复杂度。
摘要由CSDN通过智能技术生成

leetcode 767题 [medium]
中:重构字符串
英:Reorganize String
在这里插入图片描述

题解

  1. 判断是否具有重构字符串
    (1)统计字符串中的最大字符重复数 most
    (2)当且仅当 剩余字符(S.length - most) 无法填满 重复字符形成的间隔(most - 1) 时,重构不可行

  2. 构建重构字符串
    (1)统计字符串中最大字符重复数时会构建一个查询字典,键为字符,值为字符串中该字符出现的次数
    (2)使用具有最大重复数的字符形成的重复字符串为基串
    (3)依次将每一种剩余字符插入到基串字符单元后
    (4)到达基串末尾,若还有剩余字符,基串中的旧字符与新插入字符组成新的字符单元,继续执行(3)的操作。
    在这里插入图片描述

  3. 时间复杂度:O(n)

  4. 空间复杂度:O(n + m) n用于记录结果,m为字符集的大小

  5. 实现

    /**
     * @param {string} S
     * @return {string}
     */
    var reorganizeString = function(S) {
         
        // 预处理(无)
    
        let map = new Map();     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值