Skip to content

Commit 93286ff

Browse files
committedMay 17, 2023
✨ [394] FIrst attempt - PASSED
1 parent 7105863 commit 93286ff

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed
 

‎394/my_solution.js

+80
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,85 @@
33
* @return {string}
44
*/
55
const decodeString = (s) => {
6+
s = s.split("");
7+
let stack = [], result = null;
8+
console.log(`input: ${s}`);
9+
for (let i = 0; i < s.length; i++) {
10+
if ("]" === s[i]) {
11+
console.log(`HIT! ] at ${i}`)
12+
console.log(s)
13+
stack = popToOpen(stack, stack.length - 1, [])
14+
// result.push()
15+
console.log(">>>>>> final stack returned")
16+
console.log(stack)
17+
} else {
18+
stack.push(s[i])
19+
}
620

21+
}
22+
23+
console.log("stack")
24+
console.log(stack.join())
25+
console.log(stack.join(""))
726
};
27+
const popToOpen = (stack, popNb, tmp) => {
28+
console.log(`-> popToOpen - popNb - ${popNb} - stack[i] - ${stack[popNb]}`)
29+
30+
if (0 > popNb) return stack;
31+
32+
if ("[" === stack[popNb]) {
33+
stack.pop(); // Remove "["
34+
let multiplier = [];
35+
console.log("KLQWKLJELKJWLJKWQELKJEQWLKJQWELKJLKJWQELJKQWELKJW")
36+
console.log(stack)
37+
38+
let l = stack.length - 1;
39+
40+
for (let j = l; j >= 0; j--) {
41+
console.log(`---> in J loop - ${j}`)
42+
43+
let maybeNb = parseInt(stack[j]);
44+
// because the numebr will never be 0 so we can use parseInt
45+
if (!maybeNb && 0 !== maybeNb) {
46+
console.log("NOT AN INT BYEEE")
47+
console.log(stack[j])
48+
break;
49+
}
50+
51+
console.log("stack[j]")
52+
console.log(stack[j])
53+
multiplier = [...stack[j], ...multiplier];
54+
stack.pop();
55+
}
56+
57+
console.log("---> multiplier")
58+
console.log(multiplier)
59+
console.log(parseInt(multiplier.join()))
60+
console.log("tmp")
61+
console.log(tmp)
62+
63+
multiplier = parseInt(multiplier.join(""));
64+
65+
tmp = tmp.join("").repeat(multiplier).split("")
66+
return [...stack, ...tmp];
67+
}
68+
69+
// tmp = [stack.pop(), ...[...tmp, stack[i]]];
70+
console.log("--before tmp")
71+
console.log(tmp)
72+
tmp = [...stack.pop(), ...tmp];
73+
74+
console.log("--- AFTER POP")
75+
console.log(stack)
76+
console.log(tmp)
77+
78+
return popToOpen(stack, popNb - 1, tmp)
79+
}
80+
81+
// 14
82+
// decodeString("ww3[aaa2[abac]]2[a]a")
83+
// decodeString("2[asd]3[q]")
84+
// decodeString("2[asdww]")
85+
// decodeString("qq3[w]x")
86+
decodeString("33[w]z")
87+
decodeString("100[leetcode]")

‎394/solution.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* @param {string} s
3+
* @return {string}
4+
*/
5+
const decodeString = (s) => {
6+
s = s.split("");
7+
let stack = [];
8+
9+
for (let i = 0; i < s.length; i++) {
10+
if ("]" === s[i]) {
11+
stack = popToOpen(stack, stack.length - 1, [])
12+
} else {
13+
stack.push(s[i])
14+
}
15+
}
16+
17+
return stack.join("");
18+
};
19+
20+
const popToOpen = (stack, popNb, tmp) => {
21+
if (0 > popNb) return stack;
22+
23+
if ("[" === stack[popNb]) {
24+
stack.pop();
25+
let multiplier = [], l = stack.length - 1;
26+
27+
for (let j = l; j >= 0; j--) {
28+
29+
// because the numebr will never be 0 so we can use parseInt
30+
if (!parseInt(stack[j]) && 0 !== parseInt(stack[j])) break;
31+
32+
multiplier = [...stack[j], ...multiplier];
33+
stack.pop();
34+
}
35+
36+
return [...stack, ...tmp.join("").repeat(parseInt(multiplier.join(""))).split("")];
37+
}
38+
39+
tmp = [...stack.pop(), ...tmp];
40+
41+
return popToOpen(stack, popNb - 1, tmp)
42+
}

0 commit comments

Comments
 (0)
Please sign in to comment.