Skip to content

Commit 7489b95

Browse files
authored
Create 1864-minimum-number-of-swaps-to-make-the-binary-string-alternating.js
1 parent b8cc0d1 commit 7489b95

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* @param {string} s
3+
* @return {number}
4+
*/
5+
const minSwaps = function(s) {
6+
const valid = chk(s)
7+
if(valid === -1) return -1
8+
const [zeroNum, oneNum] = valid
9+
let res = Infinity
10+
if(zeroNum === oneNum) {
11+
// zero start
12+
let tmpZero = 0
13+
let cur = '0'
14+
for(let i = 0; i < s.length; i++) {
15+
if(i % 2 === 0 && s[i] !== '0') tmpZero++
16+
}
17+
18+
res = Math.min(tmpZero, res)
19+
// one start
20+
let tmpOne = 0
21+
cur = '1'
22+
for(let i = 0; i < s.length; i++) {
23+
if(i % 2 === 0 && s[i] !== '1') tmpOne++
24+
}
25+
res = Math.min(tmpOne, res)
26+
} else if(zeroNum > oneNum) {
27+
let tmpZero = 0
28+
let cur = '0'
29+
for(let i = 0; i < s.length; i++) {
30+
if(i % 2 === 0 && s[i] !== '0') tmpZero++
31+
}
32+
33+
res = Math.min(tmpZero, res)
34+
} else {
35+
let tmpOne = 0
36+
cur = '1'
37+
for(let i = 0; i < s.length; i++) {
38+
if(i % 2 === 0 && s[i] !== '1') tmpOne++
39+
}
40+
res = Math.min(tmpOne, res)
41+
}
42+
return res
43+
};
44+
45+
function chk(str) {
46+
let oneNum = 0, zeroNum = 0
47+
for(let ch of str) {
48+
if(ch === '0') zeroNum++
49+
else oneNum++
50+
}
51+
return Math.abs(zeroNum - oneNum) <= 1 ? [zeroNum, oneNum] : -1
52+
}
53+

0 commit comments

Comments
 (0)