Skip to content

Commit 82d3cdb

Browse files
committed
Done with Min Moves to Obtain String Without 3 Identical Consecutive Letters
1 parent a4b01e0 commit 82d3cdb

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

string/min-move-to-string/index.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* @author: Chisimdi Damian Ezeanieto
3+
* @date: 23/01/2020
4+
*/
5+
6+
const minMoveToObtainString = (str) => {
7+
/*
8+
* Steps:
9+
* 1. Define, 2. Represent, 3. Approach/Strategy, 4. Algorithm, 5. Analyse, 6. Experiment
10+
*/
11+
// "baaaaa" => 2
12+
let count = 0;
13+
let i = 1;
14+
let j = str.length - 2;
15+
while(i < j) {
16+
let beforeIth = str[i-1];
17+
let ith = str[i];
18+
let i1 = str[i+1];
19+
let i2= str[i+2];
20+
// console.log(ith);
21+
if ((beforeIth === i1) && (ith === i1) && (i1 === i2)) {
22+
// Swap i + 1
23+
(str[i] === "a") ? str[i] = "b" : str[i] = "a";
24+
i = i+2;
25+
} else if((ith === i1) && (i1 === i2)) {
26+
//swap
27+
(str[i] === "a") ? str[i] = "b" : str[i] = "a";
28+
count++;
29+
i++;
30+
} else {
31+
i++;
32+
}
33+
}
34+
35+
return count;
36+
}
37+
38+
module.exports = minMoveToObtainString;

string/min-move-to-string/test.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* @author: Chisimdi Damian Ezeanieto
3+
* @date: 23/01/2020
4+
*/
5+
const minMoveToObtainString = require('./index');
6+
test('minMoveToObtainString is a function', () => {
7+
expect(typeof minMoveToObtainString).toEqual('function');
8+
});
9+
test('minMoveToObtainString "baaaaa" to give 1', () => {
10+
expect(minMoveToObtainString("baaaaa")).toEqual(1);
11+
});
12+
test('minMoveToObtainString "baaabbaabbba" to give 2', () => {
13+
expect(minMoveToObtainString("baaabbaabbba")).toEqual(2);
14+
});
15+
test('minMoveToObtainString "baabab" to give 0', () => {
16+
expect(minMoveToObtainString("baabab")).toEqual(0);
17+
});
18+
test('minMoveToObtainString "baaaaabaaabbaabbba" to give 3', () => {
19+
expect(minMoveToObtainString("baaaaabaaabbaabbba")).toEqual(3);
20+
});

0 commit comments

Comments
 (0)