leetcode 767题 [medium]
中:重构字符串
英:Reorganize String
题解
-
判断是否具有重构字符串
(1)统计字符串中的最大字符重复数 most
(2)当且仅当 剩余字符(S.length - most) 无法填满 重复字符形成的间隔(most - 1) 时,重构不可行 -
构建重构字符串
(1)统计字符串中最大字符重复数时会构建一个查询字典,键为字符,值为字符串中该字符出现的次数
(2)使用具有最大重复数的字符形成的重复字符串为基串
(3)依次将每一种剩余字符插入到基串字符单元后
(4)到达基串末尾,若还有剩余字符,基串中的旧字符与新插入字符组成新的字符单元,继续执行(3)的操作。
-
时间复杂度:O(n)
-
空间复杂度:O(n + m) n用于记录结果,m为字符集的大小
-
实现
/** * @param {string} S * @return {string} */ var reorganizeString = function(S) { // 预处理(无) let map = new Map();