给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为:k[encoded_string],表示方括号内部的字字符串重复 k 次。假设输入字符串总是有效的,输入字符串没有额外的空格,且输入的方括号总是符合格式要求的。原始数据不包含数字,所有的数字只表示重复的 k 次。
循环
从第一个右括号开始,解析左边的括号,进行循环处理。时间复杂度O(N),空间复杂度O(N)
- Runtime: 76 ms, faster than 74.63%
- Memory Usage: 38.4 MB, less than 77.07%
/**
* @param {string} s
* @return {string}
*/
var decodeString = function(s) {
while(s.indexOf(']') !== -1) {
let right = s.indexOf(']')
let left = s.substring(0, right).lastIndexOf('[')
let i = left
while(i > 0 && /[0-9]/.test(s[i - 1])) {
i--
}
let num = s.substring(i, left) - '0'
let str = s.substring(left + 1, right)
let cur = ''
while(num > 0) {
cur += str
num--
}
s = s.substring(0, i) + cur + s.substring(right + 1)
}
return s
};
网友评论