说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
给你一个 二进制 字符串 s
,其中至少包含一个 '1'
。
你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。
以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。
注意 返回的结果字符串 可以 含前导零。
示例 1:
输入: s = "010"
输出: "001"
解释: 因为字符串 s 中仅有一个 '1' ,其必须出现在最后一位上。所以答案是 "001" 。
示例 2:
输入: s = "0101"
输出: "1001"
解释: 其中一个 '1' 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 "100" 。所以答案是 "1001" 。
提示:
1 <= s.length <= 100
s
仅由'0'
和'1'
组成s
中至少包含一个'1'
解题思路
这是一道比较简单的题目,首先我们应该要先理解一下题目意思,题目会给我们一个二进制字符串,希望我们对该二进制字符串进行字符重组,得到最大的最大二进制奇数。那什么是最大二进制奇数呢?二进制数字只由0
和1
组成,所以二进制奇数其实就是最后一位为1的二进制数,要使他最大的话,只需要将剩余的1全部都放到字符串的最前面即可:
- 统计
0
和1
字符的数量
for(let i = 0; i < s.length; i++){
map[s[i]] = (map[s[i]] || 0) + 1;
}
- 重组字符串
return '1'.repeat(map['1'] - 1) + '0'.repeat(map['0']) + '1';
AC代码
/**
* @param {string} s
* @return {string}
*/
var maximumOddBinaryNumber = function(s) {
const map = {};
for(let i = 0; i < s.length; i++){
map[s[i]] = (map[s[i]] || 0) + 1;
}
return '1'.repeat(map['1'] - 1) + '0'.repeat(map['0']) + '1';
};
公众号
关注公众号『前端也能这么有趣
』,获取更多有趣内容。
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。