-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy path0394-decode-string.js
45 lines (42 loc) · 1.29 KB
/
0394-decode-string.js
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
38
39
40
41
42
43
44
45
/**
* 394. Decode String
* https://leetcode.com/problems/decode-string/
* Difficulty: Medium
*
* Given an encoded string, return its decoded string.
*
* The encoding rule is: k[encoded_string], where the encoded_string inside the square
* brackets is being repeated exactly k times. Note that k is guaranteed to be a
* positive integer.
*
* You may assume that the input string is always valid; there are no extra white spaces,
* square brackets are well-formed, etc. Furthermore, you may assume that the original
* data does not contain any digits and that digits are only for those repeat numbers, k.
* For example, there will not be input like 3a or 2[4].
*
* The test cases are generated so that the length of the output will never exceed 105.
*/
/**
* @param {string} s
* @return {string}
*/
var decodeString = function(s) {
const stack = [];
let result = '';
let decoder = 0;
for (const c of s) {
if (!isNaN(c) && Number(c) >= 0 && Number(c) <= 9) {
decoder = Number(c) + decoder * 10;
} else if (c === '[') {
stack.push([result, decoder]);
result = '';
decoder = 0;
} else if (c === ']') {
const [previous, count] = stack.pop();
result = previous + result.repeat(count);
} else {
result += c;
}
}
return result;
};