
获得徽章 9
- #刷题交流# 打卡第一天: 题号19
解题思路: 初始化:创建一个与原字符串等长的结果字符串,初始填充为'1',因为我们希望最终结果中'0'尽可能靠前,而'1'靠后。
计数'0'的位置:遍历原字符串,记录所有'0'的位置以及它们的数量。同时,我们可以计算出每个'0'移动到最前面需要的操作次数,这取决于它前面有多少个'1'。
模拟移动'0':从左到右尝试将'0'移动到结果字符串的最前面。每次成功移动一个'0'时,更新剩余可使用的操作次数k,并且更新后续'0'移动所需的操作次数(因为已经有一个'0'被移动到了前面,所以后面的'0'移动到前面所需的交换次数会减少)。
停止条件:当k不足以支持下一个'0'的移动时,停止移动。此时,我们已经得到了能够通过不超过k次操作获得的最小字典序字符串。
填充剩余部分:如果还有未处理的字符,直接将它们按原始顺序添加到结果字符串的末尾,因为这些字符已经是它们能到达的最前位置了。
返回结果:最后返回构建好的结果字符串。展开评论点赞