-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdecodeString.js
More file actions
37 lines (31 loc) · 797 Bytes
/
decodeString.js
File metadata and controls
37 lines (31 loc) · 797 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
* @param {string} s
* @return {string}
*/
// s = "3[a]2[bc]" or s = "3[a2[c]]"
var decodeString = function (s) {
let numStack = [];
let strStack = [];
let currNum = 0;
let currStr = "";
for (let char of s) {
if (!isNaN(char)) {
currNum = currNum * 10 + Number(char); // build multi-digit numbers
} else if (char === '[') {
numStack.push(currNum);
strStack.push(currStr);
currNum = 0;
currStr = "";
} else if (char === ']') {
let repeatTimes = numStack.pop();
currStr = strStack.pop() + currStr.repeat(repeatTimes);
} else {
currStr += char;
}
console.log("numStack: ", numStack);
console.log("strStack :", strStack);
}
return currStr;
};
const s = "3[a2[c]]";
console.log(decodeString(s));